Oracle Join 3表 - 需要所有结果

时间:2018-03-28 16:30:13

标签: sql oracle join

  • 我需要在test1中显示所有记录 - 这是主表
  • 我需要在test2中显示记录
  • 我需要在test3中显示记录
  • 最终查询=需要显示已加入的所有3个表的输出...
  • test2和测试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 个答案:

答案 0 :(得分:1)

SELECT
 t1.*
,t2.*
,t3.*
FROM
    test1 t1
    LEFT OUTER JOIN test2 t2 ON t2.id = t1.id
    LEFT OUTER JOIN test3 t3 ON t3.id = t1.id
    where
        t1.id = '8675309'

答案 1 :(得分:0)

您需要where子句,而不是on子句。当from子句只有left join时,第一个表上的条件应该在where子句中。所有其他表的条件应该在on子句中。

这可能听起来很神秘,但有一个简单的规则:即使left join子句的计算结果为false,on也会保留第一个表中的所有行。因此,第一个表格的条件无关紧要。

你想:

SELECT t1.id
FROM test1 t1 LEFT JOIN
     test2 t2
     ON t2.id = t1.id LEFT JOIn
     t3
     ON t3.id = t1.id
WHERE t1.id = 8675309;

我还应该注意到你过度简化了你的查询,因此基本上相当于:

SELECT t1.id
FROM test1 t1
WHERE t1.id = 8675309;

我认为这不是你的意图。