【发布时间】:2011-08-26 20:03:50
【问题描述】:
我需要从两个表中获取数据
例如:我有表 test1、test2。 Test1 是父表。我需要获取的数据是存在于 test1 但不存在于 test2 中的数据。我该如何为此编写查询?
select id from test1, test2 where test1.id not in (test2.id);
【问题讨论】:
标签: mysql
我需要从两个表中获取数据
例如:我有表 test1、test2。 Test1 是父表。我需要获取的数据是存在于 test1 但不存在于 test2 中的数据。我该如何为此编写查询?
select id from test1, test2 where test1.id not in (test2.id);
【问题讨论】:
标签: mysql
执行 LEFT OUTER JOIN:这将为表 1 中的每一行在 table2 中找到相应的行 - 但是当没有找到值时,LEFT OUTER 将导致它返回表 2 值的 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)
【讨论】:
test2.id 不可为空,则两者具有相同的计划并且执行相同(如果是,则查询具有不同的语义)。我想说的是,您的陈述具有误导性(并且“通常更糟糕”的部分是错误的)并且在MySQL 中提供了关于“可怕的子查询”的神话。
SELECT id
FROM test1
WHERE id NOT IN
(
SELECT id
FROM test2
)
【讨论】:
您可以进行子查询,但也可以使用左连接:
SELECT test1.*
FROM test1
LEFT JOIN test2
ON test1.id = test2.id
WHERE test2.id IS NULL
【讨论】: