2016-04-25 238 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