2012-08-24 88 views
0

我有一個表1中WordPress作爲從第1列於表1表2中,而忽略重複

wp_term_relationships (
    object_id bigint(20), 
    term_taxonomy_id bigint(20), 
    term_order int(11) 
) 

和表的數據複製到列2 2作爲

wp_test (
    object_id bigint(20), 
    term_taxonomy_id bigint(20) 
) 

現在我想更新wp_term_relationshipswp_test值作爲

update ignore wp_term_relationships m1 
inner join wp_test m2 
on (m1.term_taxonomy_id = m2.term_taxonomy_id) 
set m1.object_id = m2.object_id 

然而,所有的值沒有更新到wp_term_relationships

我甚至試過直線上升,從wp_test作爲

insert ignore into wp_term_relationships(object_id, term_taxonomy_id) 
select object_id, term_taxonomy_id from wp_test 

插入值到wp_test_relationships

通過使用插入,但它只是與相應的更新term_taxonomy_idobject_id值爲0或 object_id值與相應的term_taxonomy_id值爲0

我如何可以將這些2列從wp_testwp_term_relationships

+0

爲了簡化起見,我正在尋找一個查詢,使我能夠將表1中column1,column2的內容轉移到表2中對應的列中,並重復處理課程。我認爲把「更新忽略」或「插入忽略」應該照顧呢? – user544079

+0

說「重複處理」不明確;重複項應該發生什麼?是否應該有*重複,或者應該用新的值代替舊的值,還是應該忽略新的值? –

回答

2

我想你需要的是一個INSERT沒有IGNOREON DUPLICATE KEY UPDATE代替:

INSERT INTO 
    wp_term_relationships (object_id, term_taxonomy_id) 
SELECT 
    object_id, 
    term_taxonomy_id 
    FROM wp_test 
ON DUPLICATE KEY UPDATE 
    wp_term_relationships.term_taxonomy_id = VALUES(term_taxonomy_id) 

注意,這裏假設你有對wp_term_relationships.object_id的唯一約束

針對不同情況編輯:

如果你的意思是什麼構成了「重複」是兩列的獨特組合,那麼你需要添加在MySQL中兩列的唯一約束,然後用你的INSERT IGNORE查詢:

ALTER TABLE wp_term_relationships ADD UNIQUE (object_id, term_taxonomy_id); 
+0

其實2列中沒有一個是唯一的。 – user544079

+0

那麼,我必須詢問您的請求的含糊性質......什麼是您的需求中的「重複」?也許在任一列中都可能有重複項,但是兩個不同值的重複行都不重複?即沒有共同的配對? –

+0

是的,你知道了。在兩列中都可以有重複的值,但是沒有重複的行 – user544079

0
UPDATE wp_term_relationships m1, wp_test m2 
SET m1.term_taxonomy_id = m2.term_taxonomy_id 
WHERE m1.object_id = m2.object_id; 

我假設表通過名爲「object_id」的列鏈接在一​​起。

+0

這會導致重複鍵錯誤。如果您看到以前的答案評論,則2列有重複,但是行必須是唯一的。 – user544079