SQL Query用于获取另一个表中不存在列中值的行

时间:2010-01-14 11:41:19

标签: php sql mysql

我有一个产品表,其中一列包含一个以空格分隔的ID列表(例如:“23 42 365”),该列称为“类别”。这些数字指的是另一个表(类别)中的行ID。

我需要提取所有产品行,其中空格分隔列表中的所有ID都指向不再存在的类别表上的行。

我知道这不是最好的数据库设计,但我在旧系统上遇到过这项任务。我甚至不确定它是否可以完全使用SQL语句完成,但由于产品表上的记录数量很多,使用PHP逻辑来确定要返回的行会更慢。但是,如果这是唯一的方法,那就是我要做的!

2 个答案:

答案 0 :(得分:4)

SELECT  m.*
FROM    mytable m
LEFT JOIN
        categories c
ON      FIND_IN_SET(c.id, REPLACE(m.categories, ' ', ','))
WHERE   c.id IS NULL

答案 1 :(得分:1)

您可以使用外部联接来获取缺失的行,搜索类别为nu​​ll的位置。

http://dev.mysql.com/doc/refman/5.0/en/join.html