我在从MySQL数据库中删除行时遇到困难。我有两张桌子,我正在加入。加入可能不是最好的解决方案,我绝对乐于接受建议。表格如下
Table a
part_number,cat_code,description
Table b
part_number,cat_code,description
表b是其内容最近更新的正确表。表b只有一个产品系列。表a包含公司当前和之前制作的所有产品系列。表a具有重复的旧数据和part_numbers,并与多个cat_codes相关联。
cat_codes应该与part_numbers有一对多的关系。例如,part_number 123,456和789的cat_code可以为1A。两个表的主键是part_number + cat_code
当我运行这个select语句时,我得到了我需要从表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语句中使用该select语句时,它不起作用。这是破碎的陈述。
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 :(得分: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]
答案 1 :(得分:0)
你应该可以用连接删除 - 除非我遗漏了一些东西:
DELETE a
FROM a
INNER JOIN b
ON b.part_number = a.part_number
AND a.cat_code != b.cat_code