我有一个非常混乱的数据库,其中的一个表在一个单独的表中包含我需要的两个值。这是我的问题:
Table1 - id Table2 - id - table1_id - table3_id_1 - table3_id_2 Table3 - id - value
我需要从table1进行连接,这将使我table3在两个单独的列中返回值。所以我想要这样的事情:
table3
table1.id | table2.id | table2.table3_id_1 | table2.table3_id_2 | X | Y
其中X和Y是分别通过table3_id_1和连接的行的值table3_id_2。
X
Y
table3_id_1
table3_id_2
可能使它们成为变量或其他东西,以便我也可以在WHERE子句中过滤它们?
WHERE
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;
无需参与table1。table2拥有您所需要的一切- 假设有一个外键约束可以保证参照完整性(t2.table1_id实际上全部存在于中table1)。否则,您可能想加入table1,从而仅选择也存在于中的行table1。
table1
table2
t2.table1_id
由于类似的原因,我使用 LEFT [OUTER] JOIN (但不[INNER] JOIN使用)加入这两个实例table3:尚不清楚是否可以保证参照完整性-以及是否可以包含任何键列NULL。一[INNER] JOIN会从那里没有找到匹配的结果下降行。我假设您宁愿显示这样的行,并NULL为任何缺少的x或值y。
LEFT [OUTER] JOIN
[INNER] JOIN
NULL
x
y
table3.id需要为UNIQUE,否则我们可能会将行与每个行的多个匹配项相乘LEFT JOIN:
table3.id
UNIQUE
LEFT JOIN