2016-04-25 241 views
0

一个高效的查询我有一个看起来像这样究竟是什么任务

item_id | status 
1  | null 
2  | null 
2  | new 
3  | new 
4  | null 
4  | new 
5  | null 

注意,第2项和第4兼得2种状态的数据文件:空和新的。 我想创建一个查询,只提取1状态,这是null的item_id。所以,我想我的查询,只提取1和5

我落得这样做,但是这看起来并不高效:

1.List项目与空状态

create table query_1 as 
select * from table1 where status = 'null'; 

2与新的状态

create table query_2 as 
select * from table1 where status = 'new'; 

3.select从查询1中的所有结果,但不包括从查询结果中发现有任何ID的.List项目2

select * from query_1 where item_id not in (select item_id from query_2) 

我在想这个吗?有没有更简单的查询可以实现这一点?

+0

首先,你必须一起检查空值'IS NULL'。 '= null'或'='null''将不起作用。 – Stavr00

回答

-1

你可以在这种情况下

SELECT DISTINCT item_id FROM items WHERE status IS NULL; 
+0

这仍然会返回null和其他状态的项目 – Bohemian

1

首先使用DISTINCT你有IS NULL检查null值。 =null='null'将不起作用。

SELECT item_id, MAX(status) 
FROM table1 
GROUP BY item_id 
HAVING MAX(status) IS NULL 
0

由具有ITEM_ID COUNT(*)= 1从表1 组选择ITEM_ID 和状态是空

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 
     ) 
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