如果当前没有检出工具(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;
答案 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;