如何从两个相关表中获取数据按一个表过滤?

时间:2011-08-26 12:00:51

标签: mysql

我需要从两个表中获取数据

例如:我有表test1,test2。 Test1是父表。我需要获取数据是在test1中存在而不是在test2中。我该如何为此编写查询?

select id from test1, test2 where test1.id not in (test2.id);

3 个答案:

答案 0 :(得分:4)

执行LEFT OUTER JOIN:这将对表1中的每一行找到table2中的相应行 - 但是当没有找到值时,LEFT OUTER将使它返回table2值为NULL的行。然后,只询问table2字段为NULL的那些字段(因此不存在)。

select id from test1
LEFT OUTER JOIN test2 
ON test1.id = test2.id
where test2.id IS NULL

您也可以尝试使用子查询,但这不会更好(通常更糟):

SELECT id FROM test1 
WHERE id NOT IN (select id from test2)

答案 1 :(得分:3)

SELECT  id
FROM    test1
WHERE   id NOT IN
        (
        SELECT  id
        FROM    test2
        )

答案 2 :(得分:1)

您可以执行子查询,但也可以使用左连接:

SELECT test1.*
FROM test1
LEFT JOIN test2
ON test1.id = test2.id
WHERE test2.id IS NULL