我有一个看起来像这样的数据文件
item_id | status
1 | null
2 | null
2 | new
3 | new
4 | null
4 | new
5 | null
请注意,第2项和第4项同时具有2种状态:null和new。 我想创建一个只提取1状态的item_id的查询,该状态为null。所以,我希望我的查询只提取1和5.
我最终做到了这一点,但这看起来效率不高:
1.列出状态为空的项目
create table query_1 as
select * from table1 where status = 'null';
2.具有新状态的列表项
create table query_2 as
select * from table1 where status = 'new';
3.从查询1中选择所有结果,不包括从查询2的结果中找到的任何ID
select * from query_1 where item_id not in (select item_id from query_2)
我在想这个吗?是否有更简单的查询可以实现此目的?
答案 0 :(得分:1)
首先,您必须使用IS NULL
检查空值。 =null
或='null'
无法正常工作。
SELECT item_id, MAX(status)
FROM table1
GROUP BY item_id
HAVING MAX(status) IS NULL
答案 1 :(得分:0)
选择item_id 来自table1 按item_id分组 有count(*)= 1且状态为空
答案 2 :(得分:0)
SELECT item_id FROM items
WHERE status IS NOT NULL
AND item_id NOT IN
(SELECT item_id FROM items
WHERE status IS NULL
)
答案 3 :(得分:0)
您可以使用self-join
。您需要做的是删除具有new
值的item_id。您想要的其余条目。因此,您可以将查询框架化为:
SELECT item_id,
status
FROM tableName
WHERE item_id NOT IN (SELECT item_id
FROM #tab
WHERE status = 'new')
你可以在这里看到 - > SQL Fiddle Example
答案 4 :(得分:-1)
您可以在此实例中使用DISTINCT
SELECT DISTINCT item_id FROM items WHERE status IS NULL;