SELECT products.name from products WHERE products.id
NOT IN ( SELECT DISTINCT(products.id) FROM timer_completed
INNER JOIN com_jobcard ON com_jobcard.id = timer_completed.job_card_id
INNER JOIN products ON products.id = com_jobcard.product_id)
在上面的查询SELECT DISTINCT(products.id) FROM timer_completed
将返回多个值,但我需要那些不在该结果集中的产品,所以我使用了NOT IN
函数,但它返回错误。你能否告诉我一个更好的方法来实现这个目标。
答案 0 :(得分:0)
我怀疑您的sub-query
会返回一些NULL
值,这些值会使NOT IN
变为fail
(不会抛出错误)。使用NOT EXISTS
执行此操作
SELECT products.NAME
FROM products p
WHERE NOT EXISTS (SELECT 1
FROM timer_completed
INNER JOIN com_jobcard
ON com_jobcard.id = timer_completed.job_card_id
WHERE p.id = com_jobcard.id)
答案 1 :(得分:0)
使用NOT EXISTS
代替NOT IN
。我希望这会有效..
NOT IN
, NULL
操作将失败。在这种情况下,NOT IN
查询的结果为0
行,而NOT EXISTS
查询仍会显示一个表中存在但未显示在另一个表中的行。
答案 2 :(得分:0)
在MySQL中搜索缺失值的最佳方法是使用
LEFT JOIN
/IS NULL
或NOT IN
而不是NOT EXISTS
。
您可以在此处使用LEFT JOIN
。
SELECT P.name
FROM
products P
LEFT JOIN
(SELECT DISTINCT(products.id) FROM timer_completed
INNER JOIN com_jobcard ON com_jobcard.id = timer_completed.job_card_id
INNER JOIN products ON products.id = com_jobcard.product_id) T
ON P.product_id <> T.product_id
WHERE T.product_id IS NULL
希望这有帮助。