首页 文章

Oracle Join 3表 - 需要所有结果

提问于
浏览 1076
1
  • 我需要在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 回答

  • 1

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

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

    你要:

    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;
    

    我认为这不是你的意图 .

  • 0
    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'
    

相关问题