我不习惯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”;
有人能给我一个提示来解决这个问题吗?
答案 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 ...