使用NOT IN功能

时间:2015-11-21 05:43:19

标签: mysql sql

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函数,但它返回错误。你能否告诉我一个更好的方法来实现这个目标。

3 个答案:

答案 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 NULLNOT 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

希望这有帮助。