2012-11-04 71 views
1

我新的MySQL的檢索基於鍵一些行,所以我會用一個例子來揭露我的問題......MySQL查詢:在另一個表

我有兩個表:

表1 :

+----+-----+-----+-----+-----+ 
| id | a1 | b1 | c1 | d1 | 
+----+-----+-----+-----+-----+ 
| 1 | ... | ... | ... | ... | 
| 2 | ... | ... | ... | ... | 
| 3 | ... | ... | ... | ... | 
| 4 | ... | ... | ... | ... | 
| 5 | ... | ... | ... | ... | 
| 6 | ... | ... | ... | ... | 
+----+-----+-----+-----+-----+ 

表2:

+----+-----+-----+-----+---------------+ 
| id | a2 | b2 | c2 | table1_row_id | 
+----+-----+-----+-----+---------------+ 
| 1 | ... | ... | ... | ...   | 
| 2 | ... | ... | ... | 4    | 
| 3 | ... | ... | ... | ...   | 
+----+-----+-----+-----+---------------+ 

表2列table1_row_id是table1的關鍵。

我應該使用哪種查詢來檢索table2.table1_row_id列中未引用的table1數據?

例如,對於上面的表,查詢將返回一個表,如:

+----+-----+-----+-----+-----+ 
| id | a1 | b1 | c1 | d1 | 
+----+-----+-----+-----+-----+ 
| 1 | ... | ... | ... | ... | 
| 2 | ... | ... | ... | ... | 
| 3 | ... | ... | ... | ... | 
| 5 | ... | ... | ... | ... | 
| 6 | ... | ... | ... | ... | 
+----+-----+-----+-----+-----+ 

也許這是簡單的,但我不知道我應該怎麼辦尚未...

回答

1
select t1.a1, t1.b1, t1.c1, t1.d1 
from table1 t1 
left join table2 t2 on t2.table1_row_id = t1.id 
where t2.id is null 
3
SELECT * 
FROM t1 
WHERE 
    `id` NOT IN (SELECT `table1_row_id` 
       FROM t2 
       WHERE 
        `table1_row_id` IS NOT NULL) 
+0

我試過了,但它沒有檢索到任何行... – amp

+1

正常情況下,您無法獲取任何行,子查詢將返回空值,這將阻止主查詢返回行。而且,如果subtable是大的,mysql使用這種方法的性能很差。通過從子查詢中排除空記錄,這將完成這項工作。 '(SELECT table1_row_id FROM table2 where table1_row_id not null)' –

+0

有了這個改變,它可以工作......謝謝! – amp