2012-02-18 63 views
1

我在從我的MySQL數據庫中刪除行時遇到困難。我有兩張桌子,我正在加入。加入可能不是最好的解決方案,我絕對樂於接受建議。表是如下使用內部連接刪除單個表中的行

 Table a          

PART_NUMBER,cat_code介紹

 Table b 

PART_NUMBER,cat_code介紹

表B是正確的表的內容最近被更新。表b只有一條產品線。表a具有公司當前和以前製作的所有產品線。表a具有與多個cat_codes重複關聯的舊數據和part_number。

正確的cat_codes應該具有一個與實施例part_numbers.For PART_NUMBER 123456一對多的關係,和789可以具有兩個表的1A.The主鍵的cat_code是PART_NUMBER + cat_code

當運行此選擇語句我得到我需要從表a中刪除的唯一標識符的輸出。

SELECT CONCAT(a.part_number,a.cat_code) 
FROM 
b 
INNER JOIN 
a 
WHERE 
a.part_numer = b.part_number 
AND a.cat_code != b.cat_code 

但是,當我嘗試在DELETE FROM語句中使用該選擇語句它不起作用。這是失敗的陳述。

DELETE FROM 
a 
WHERE 
CONCAT(part_number,cat_code) IN (SELECT CONCAT(a.part_number,a.cat_code) 
FROM 
b 
INNER JOIN 
a 
WHERE 
a.part_numer = b.part_number 
AND a.cat_code != b.cat_code) 

任何幫助,將不勝感激感謝

+0

什麼錯誤呢它給? – bfavaretto 2012-02-18 00:40:39

+0

它沒有給出錯誤,只返回沒有受到影響的行。 – 2012-02-20 21:53:02

回答

0

DELETE命令不具有IN參數,所以你需要在你的子查詢括號。嘗試:

DELETE FROM a 
WHERE (
    CONCAT(part_number,cat_code) 
    IN (SELECT CONCAT(a.part_number,a.cat_code) 
     FROM b INNER JOIN a WHERE a.part_numer = b.part_number 
      AND a.cat_code != b.cat_code) 
    ) 

欲瞭解更多有關DELETE,看到了MySQL documentation。尤其是,對於單個表的語法是:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name 
[WHERE where_condition] 
[ORDER BY ...] 
[LIMIT row_count] 
+0

我會試着用下一個表格進行比較和更新。我所做的工作是創建一個單獨的列表,然後將第一個查詢的結果插入到表中。 INSERT INTO SELECT鍵CONCAT(a.part_number,a.cat_code) FROM b INNER JOIN 一個 WHERE a.part_numer = b.part_number AND a.cat_code = b.cat_code!;然後我只是使用關鍵表來比較刪除。 – 2012-02-20 21:57:14

0

你應該能夠做一個join-刪除,除非我失去了一些東西:

DELETE a 
FROM a 
INNER JOIN b 
ON b.part_number = a.part_number 
AND a.cat_code != b.cat_code 
+0

我有更多的產品線來測試,所以我也會給你的方法一試。它看起來像你的方法是最優雅的。謝謝您的意見。我會回發給這個線程所有我的結果。 – 2012-02-20 22:05:47