-
我需要在test1中显示所有记录 - 这是主表
-
我需要在test2中显示记录
-
我需要在test3中显示记录
-
最终查询=需要显示已加入的所有3个表的输出...
-
test2和test 3可能匹配也可能不匹配
-
test1将拥有所有记录 .
例如
select * from test1 where ID = '8675309'; = 1 entry
select * from test2 where ID = '8675309'; = null
select * from test3 where ID = '8675309'; = 1 entry
我尝试过这种方法,但它没有按预期工作 .
SELECT
t1.id
FROM
test1 t1
LEFT OUTER JOIN test2 t2 ON t2.id = t1.id
LEFT OUTER JOIN test3 t3 ON t3.id = t1.id
AND
t1.id = '8675309'
结果未显示8675309,显示所有表值 .
2 回答
您需要
where
子句,而不是on
子句 . 当from
子句只有left join
时,第一个表上的条件应该在where
子句中 . 所有其他表的条件应该在on
子句中 .这可能听起来很神秘,但有一个简单的规则:即使
on
子句的计算结果为false,left join
也会保留第一个表中的所有行 . 因此,第一个表格的条件无关紧要 .你要:
我还应该注意到你过度简化了你的查询,所以它基本上相当于:
我认为这不是你的意图 .