一尘不染

联接表两次-在同一表的两个不同列上

sql

我有一个非常混乱的数据库,其中的一个表在一个单独的表中包含我需要的两个值。这是我的问题:

Table1
- id

Table2
- id
- table1_id
- table3_id_1
- table3_id_2

Table3
- id
- value

我需要从table1进行连接,这将使我table3在两个单独的列中返回值。所以我想要这样的事情:

table1.id | table2.id | table2.table3_id_1 | table2.table3_id_2 | X | Y

其中XY是分别通过table3_id_1和连接的行的值table3_id_2

可能使它们成为变量或其他东西,以便我也可以在WHERE子句中过滤它们?


阅读 143

收藏
2021-03-17

共1个答案

一尘不染

SELECT t2.table1_id
, t2.id AS table2_id
, t2.table3_id_1
, t2.table3_id_2
, t31.value AS x
, t32.value AS y
FROM table2 t2
LEFT JOIN table3 t31 ON t31.id = t2.table3_id_1
LEFT JOIN table3 t32 ON t32.id = t2.table3_id_2;

无需参与table1table2拥有您所需要的一切-
假设有一个外键约束可以保证参照完整性(t2.table1_id实际上全部存在于中table1)。否则,您可能想加入table1,从而仅选择也存在于中的行table1

由于类似的原因,我使用 LEFT [OUTER] JOIN (但不[INNER] JOIN使用加入这两个实例table3:尚不清楚是否可以保证参照完整性-以及是否可以包含任何键列NULL。一[INNER] JOIN会从那里没有找到匹配的结果下降行。我假设您宁愿显示这样的行,并NULL为任何缺少的x或值y

table3.id需要为UNIQUE,否则我们可能会将行与每个行的多个匹配项相乘LEFT JOIN

2021-03-17