加入 - 无论顺序如何

时间:2012-03-08 21:58:00

标签: mysql

如何连接多个表而不依赖于LEFT或RIGHT join

示例:

t1 
        id | date
       -----------
       NULL  NULL

t2 
        id | value
       ------------
        1  |  bla

SELECT date,value 
FROM t2 LEFT JOIN t1 
    ON t1.id = t2.id where t2.id = 1

- 选择正常

使用右连接相同的查询返回空值...

2 个答案:

答案 0 :(得分:2)

SELECT `date`, `value` FROM t2 FULL OUTER JOIN t1 ON t1.id = t2.id

编辑: 这将返回所有记录,即使这些加入字段没有匹配。抱歉,这会给您语法错误。请参阅下面的编辑。

如果您只想要匹配,请使用inner join

SELECT `date`, `value` FROM t2 INNER JOIN t1 ON t1.id = t2.id

编辑: MySQL中没有FULL OUTER JOIN。您必须使用UNION进行模拟并合并LEFTRIGHT JOIN

SELECT `date`, `value` FROM t2 LEFT JOIN t1 ON t1.id = t2.id
UNION
SELECT `date`, `value` FROM t2 RIGHT JOIN t1 ON t1.id = t2.id

这也会返回您的NULL值,但它们不会匹配,因为NULL != NULL

答案 1 :(得分:0)

您必须使用FULL OUTER JOIN语法。事实上,Left JOIN返回Left列中的所有结果,而right join返回右列中的所有结果。完全外部的两个都返回。

SELECT date,value FROM t2 FULL OUTER JOIN t1 ON t1.id = t2.id where t2.id = 1