具有多个表的SQL查询

时间:2013-02-21 12:50:03

标签: sql join

我不习惯SQL查询,但我必须执行涉及大量表的查询。他们在这里:

(注意:id始终是PRIMARY KEY。)

A(id, name)
B(id, title, a_id, FOREIGN KEY(a_id) REFERENCES A(id))
C(id, d_id, b_id, FOREIGN KEY (d_id) REFERENCES D(id), FOREIGN KEY REFERENCES (b_id) REFERENCES B(id))
D(id, content)
E(id d_id, a_id, c_id, FOREIGN KEY (d_id) REFERENCES D(id), FOREIGN KEY (a_id) REFERENCES A(id),  FOREIGN KEY (C_id) REFERENCES c(id))

我需要检索表E中的所有行。

这是我写的查询:

SELECT *
FROM E
LEFT JOIN D ON E.d_id = D.id
LEFT JOIN A ON E.a_id = A.id
LEFT JOIN B LEFT JOIN A ON B.a_id = B.id
ON C.b_id = B.id
LEFT JOIN D ON C.d_id = D.id
ON E.c_id = C.id

但是它给了我一个运行时错误:

  

不明确的列名“ID”;

有人能给我一个提示来解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

问题可能在于此声明

LEFT JOIN B LEFT JOIN A ON B.a_id = B.id?没有为第一个left join指定条件?

此外,您将B.a_id与B.id进行比较,它只是比较同一个表中的两列。

答案 1 :(得分:0)

请改为尝试:

SELECT *
FROM E
LEFT JOIN D ON E.d_id = D.id
LEFT JOIN A ON E.a_id = A.id
LEFT JOIN B ON B.id = B.a_id
LEFT JOIN C ON C.b_id = B.id AND c.d_id = d.Id

答案 2 :(得分:0)

您需要在其他表中重命名id,或者不要查看id。

在SQL Server中:

选择A.id AS id_A,B.id AS id_B ...