如果NOT IN段中的表为空,则SQL语句不返回任何结果

时间:2014-03-06 14:23:41

标签: mysql sql select

如果当前没有检出工具(checkinout表当前为空),则遇到根本没有结果的问题。一旦我将一条记录输入checkinout表,我就会开始获取当前未检出的工具列表。如果我必须放入虚假的结账历史,这不是惊天动地,但我宁愿不必那样做。关于如何解决这个问题的任何想法?感谢。

SELECT DISTINCT tools.id, 
       tools.ToolNumber, 
       tools.Description
  FROM tools, 
       checkinout
 WHERE tools.id NOT IN(SELECT checkinout.idTool 
                         FROM checkinout 
                        WHERE checkinout.CheckInDT IS NULL)
       AND tools.Retired=0 
ORDER BY 
       tools.ToolNumber;

3 个答案:

答案 0 :(得分:1)

您也可以使用LEFT JOIN执行此操作,其中RIGHT上的列为空

Here是一个显示SQL联接的有用图像

SELECT DISTINCT tools.id,
       tools.ToolNumber,
       tools.Description
FROM tools
LEFT JOIN checkinout 
    ON tools.id = checkinout.idTool AND checkinout.CheckInDT IS NULL
WHERE checkinout.idTool IS NULL
AND tools.retired = 0
ORDER BY tools.ToolNumber

答案 1 :(得分:0)

为什么要使用2张桌子?你永远不会加入checkinout

试试这个

SELECT DISTINCT tools.id, 
       tools.ToolNumber, 
       tools.Description
  FROM tools        
 WHERE tools.id NOT IN (
                        SELECT checkinout.idTool 
                          FROM checkinout 
                         WHERE checkinout.CheckInDT IS NULL
                       )
       AND tools.Retired=0
ORDER BY 
       tools.ToolNumber;

答案 2 :(得分:0)

因为还没有人提到EXISTS(你可以用这种方式摆脱DISTINCT):

SELECT tools.id, 
       tools.ToolNumber, 
       tools.Description
  FROM tools
 WHERE NOT EXISTS ( SELECT * 
                      FROM checkinout 
                     WHERE checkinout.CheckInDT IS NULL
                       AND checkinout.idTool = tools.id )
   AND tools.Retired=0 
ORDER BY 
       tools.ToolNumber;