2012-02-18 42 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