我有一个产品表,其中一列包含一个以空格分隔的ID列表(例如:“23 42 365”),该列称为“类别”。这些数字指的是另一个表(类别)中的行ID。
我需要提取所有产品行,其中空格分隔列表中的所有ID都指向不再存在的类别表上的行。
我知道这不是最好的数据库设计,但我在旧系统上遇到过这项任务。我甚至不确定它是否可以完全使用SQL语句完成,但由于产品表上的记录数量很多,使用PHP逻辑来确定要返回的行会更慢。但是,如果这是唯一的方法,那就是我要做的!
答案 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)
您可以使用外部联接来获取缺失的行,搜索类别为null的位置。