2013-02-19 43 views
1

工作,我有2個表datapage,在data表我有一些記錄,以及一些data記錄ID將店page表。NOT IN不是在我的查詢

現在我想要選擇idtitle表格data表格不在page表格中。 所以我寫了這個查詢:

SELECT d.id,d.title 
FROM data AS d, page AS p 
WHERE d.id NOT IN (p.data_id) 
ORDER BY d.title ASC 

此查詢將工作,但是當page表是空的這個查詢無法恢復的記錄!

回答

2

使用LEFT JOIN

SELECT a.* 
FROM data a 
     LEFT JOIN page b 
      ON a.ID = b.data_id 
WHERE b.data_id IS NULL 
ORDER BY a.title ASC 
+1

(http://stackoverflow.com/questions/1200295/sql-join-vs-in-performance) – 2013-02-19 08:39:53

2

這是它與子查詢,但沒有加入:

SELECT id, title 
FROM data 
WHERE id NOT IN (SELECT data_id FROM page) 
ORDER BY title ASC 
0

我認爲你正在試圖確定什麼data沒有page

SELECT d.id, d.title 
FROM data d 
WHERE d.id NOT IN (
    SELECT data_id FROM page 
) 
ORDER BY d.title ASC; 
1

的NOT IN會給你想要的東西,但根據你的數據庫系統(和索引的類型)上,這將不會是最好(最快)的解決方案。更常見的是,EXISTS不會更快。但你的里程可能會有所不同

試試看:?SQL JOIN VS在性能]

SELECT id, title FROM data 
WHERE NOT EXISTS (SELECT * FROM page WHERE page.data_id = data.id) 
ORDER BY title ASC