加入两个表......没有加入

Join two tables... without JOIN

我有两个 tables T1 和 T2,都有一个字段 (id)。

T1.id has values:
1
2
4

T2.id has values:
1
3
4

我需要加入这些 tables。

想要的结果:

T1    |    T2
------|------
1     |    1
2     |    null
null  |    3
4     |    4

使用 JOIN 我可以轻松做到:

查询 1

SELECT * FROM T1 FULL JOIN T2 ON T1.id=T2.id

但是由于某些原因我不能在这里使用 JOIN。所以,像这样的简单查询

查询 2

SELECT * FROM T1, T2 WHERE T1.id=T2.id

我只会得到两行数据

T1    |    T2
------|------
1     |    1
4     |    4

因为其他两行将被省略,因为其他行中没有匹配项 table。

不管用什么来填补缺失的匹配项。它可以是 NULL 或任何其他值 - 实际上是任何值,但我需要获取那些省略的行。

有没有办法在不使用任何 JOIN 的情况下修改查询 2 以获得所需的结果?

PS:真正的table结构不同,所以也不可以UNION。

PPS: 我刚刚给出了一个模型来指出问题。实际上,它是一个涉及许多 table 的“巨型查询”,每个查询都有几十列。

SELECT t1.id t1_id, t2.id t2_id
FROM ( SELECT id FROM table1
       UNION DISTINCT
       SELECT id FROM table2 ) t0
NATURAL LEFT JOIN table1 t1 
NATURAL LEFT JOIN table2 t2

仅支持隐式联接时实现 FULL OUTER JOIN 的标准方法。

select t1.id t1id, t2.id t2id
from t1, t2 where t1.id = t2.id

union all

select id, null from t1
where not exists (select 1 from t2 where t2.id = t1.id)

union all

select null, id from t2
where not exists (select 1 from t1 where t1.id = t2.id)

order by coalesce(t1id, t2id)

第一个 SELECT 产生结果的 INNER JOIN 部分。

第二个 SELECT 其他 LEFT OUTER JOIN 行添加到结果中。

第三个 SELECT 附加 RIGHT OUTER JOIN 行添加到结果中。

一起,FULL OUTER JOIN完成了!

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ec154ad243efdff2162816205fdd42b5