【发布时间】:2014-05-08 02:48:54
【问题描述】:
我有一个类似下面的查询,它工作正常。
SELECT
"A".id AS A_id,
"B".id AS B_id,
"C".id AS C_id,
"D".id AS D_id,
"E".id AS E_id,
"F".id AS F_id,
"G".id AS G_id,
"H".id AS H_id,
"I".id AS I_id
FROM "A"
INNER JOIN "B" ON "A".id = "B".A_id
INNER JOIN "C" ON "B".C_id = "C".id
INNER JOIN "D" ON "C".D_id = "D".id
INNER JOIN "E" ON "D".id = "E".D_id
INNER JOIN "F" ON "E".F_id = "F".id
INNER JOIN "G" ON "F".G_id = "G".id
INNER JOIN "H" ON "G".id = "H".G_id
INNER JOIN "I" ON "H".I_id = "I".id;
现在我想添加特殊条件。表“B”与另一个表连接 我必须添加特殊加入(完全加入),但毕竟加入。像下面的东西 (当然不行):
SELECT
"A".id AS A_id,
"B".id AS B_id,
"C".id AS C_id,
"D".id AS D_id,
"E".id AS E_id,
"F".id AS F_id,
"G".id AS G_id,
"H".id AS H_id,
"I".id AS I_id,
"Setup".id AS setup_id,
"Run".id AS run_id
FROM "A"
INNER JOIN "B" ON "A".id = "B".A_id
INNER JOIN "C" ON "B".C_id = "C".id
INNER JOIN "D" ON "C".D_id = "D".id
INNER JOIN "E" ON "D".id = "E".D_id
INNER JOIN "F" ON "E".F_id = "F".id
INNER JOIN "G" ON "F".G_id = "G".id
INNER JOIN "H" ON "G".id = "H".G_id
INNER JOIN "I" ON "H".I_id = "I".id
AND FROM
"Setup"
FULL JOIN "Run" ON "Setup".id = "Run".id
FULL JOIN "B" ON "Setup".id = "B".id;
我使用了完全连接,因为“运行”和“设置”表中的每一个都只包含一行,但与表“B”相连,该表有不止一行,我希望将它们全部放在结果表中.
如何修复?也许尝试在选择中使用选择?
【问题讨论】:
-
我不明白。每个 B 音轨只有一个设置记录吗?每个设置记录只有一个运行记录?然后只需使用内部连接就可以了。
-
你可能需要
LEFT JOIN这些表,而不是完全连接。
标签: sql postgresql join inner-join jointable