Mysql 如何使用中间表在两个表上应用外部联接?

Mysql 如何使用中间表在两个表上应用外部联接?,mysql,join,Mysql,Join,所需产出: table1 | id | value -------------------- 1 | john 2 | frank 3 | patel 4 | jim table2 | id | value -------------------- 6 | steve 7 | tim 8 | sunny 9 | bhaskar mer

所需产出:

table1 | id | value
--------------------
          1 | john
          2 | frank
          3 | patel
          4 | jim

table2 | id | value
--------------------
          6 | steve
          7 | tim
          8 | sunny
          9 | bhaskar

merged | tabid1 | tabid2
------------------------------
         3      | 7
         4      | 8
我试过:

    output  | tabid1 | tabval1 | tabid2 | tabval2
              1      | john    | NULL   | NULL
              2      | frank   | NULL   | NULL
              3      | patel   | 7      | tim
              4      | jim     | 8      | sunny
              NULL   | NULL    | 6      | steve
              NULL   | NULL    | 9      | bhaskar
但是它给出了16行而不是6行

SELECT * 
FROM table1
LEFT JOIN merged m1 ON table1.id = m1.tabid1, merged m2
RIGHT JOIN table2 ON table2.id = m2.tabid2
我不知道你为什么觉得有必要在那里加入两次
merged

SELECT table1.id AS tabid1, table1.value AS tabval1,
       table2.id AS tabid2, table2.value AS tabval2
FROM table1
LEFT JOIN merged m1 ON table1.id = m1.tabid1
RIGHT OUTER JOIN table2 ON table2.id = m1.tabid2
或使用右连接:

select table1.id,table1.value,table2.id,table2.value 
     from table1 left join merged on table1.id=merged.tabid1 
            left join table2 on merged.tabid2=table2.id 
union 
select table1.id,table1.value,table2.id,table2.value 
     from table2 left join merged on table2.id=merged.tabid2
     left join table1 on merged.tabid1=table1.id ;

这只返回四行。这不是jerrymouse想要的答案。mysql+1中没有完整的外部联接,但是使用缩写的表名有点难读懂。这很有效,我提交了一个编辑来使用@jerrymouse的表名
select table1.id,table1.value,table2.id,table2.value 
     from table1 left join merged on table1.id=merged.tabid1 
            left join table2 on merged.tabid2=table2.id 
union 
select table1.id,table1.value,table2.id,table2.value 
     from table2 left join merged on table2.id=merged.tabid2
     left join table1 on merged.tabid1=table1.id ;
SELECT * FROM 
    table1 LEFT JOIN merged on table1.id=merged.tabid1 
           LEFT JOIN table2 ON merged.tabid2=table2.id  
UNION 
SELECT * FROM 
    table1 RIGHT JOIN merged on table1.id=merged.tabid1 
           RIGHT JOIN table2 ON merged.tabid2=table2.id WHERE table1.id IS NULL;