我正在开发一个MySQl数据库,并为我们的invetory提供类似跟踪系统的功能。使用设备的inventoryNumber,获得它的人,当他得到它以及何时返回它。如果返回的列为null,则该人员仍具有该设备。
|InventoryNumber | user | receive | returned |
+----------------+-------+------------+------------+
| X1 | Mark | 2017-01-01 | 2017-01-03 |
| X1 | Mark | 2017-01-03 | null |
| X2 | Frank | 2017-01-01 | null |
现在我想知道哪些设备没有使用。首先,我必须GROUP BY InventoryNumber
,但“显示”null
。之后我必须过滤WHERE returned IS NOT NULL
我知道如何单独执行此操作,但在GROUP BY
后,他始终使用第一行而不是null
的那一行,因此我无法使用WHERE
。< / p>
我希望你能理解我的问题,并能帮助我。
答案 0 :(得分:2)
这将返回没有单行的所有数字,即NULL。快速提醒:WHERE过滤具有过滤器组的行。
SELECT InventoryNumber
GROUP BY InventoryNumber
HAVING SUM(returned IS NULL)=0
答案 1 :(得分:1)
您可以将子查询与NOT IN
一起使用,例如:
SELECT *
FROM table
WHERE returned IS NOT NULL
AND InventoryNumber NOT IN (
SELECT InventoryNumber
FROM table
WHERE returned IS NULL
);
答案 2 :(得分:0)
你可以试试这个:
select
`InventoryNumber`
from
`track`
where
`returned` is NOT NULL
group by `InventoryNumber`;