2012-11-04 36 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