我是新来的,上课了。我很难解决这个问题。任何帮助将不胜感激。
谢谢。
Select
LastName, FirstName, DonorID, FundName, TotalPledged
From
Donors.dbo.Donor, Donors.dbo.Pledge
Where -- (marc_s): this was missing from your original query .....
Donors.dbo.donor.donorID = Donors.dbo.Pledge.DonorID
And DonorID = 59034;
答案 0 :(得分:2)
您正在混合使用隐式和显式连接语法,应该使用后者:
SELECT LastName, FirstName, p.DonorID, FundName, TotalPledged
FROM Donors.dbo.Donor d
INNER JOIN Donors.dbo.Pledge p
ON d.donorID = p.DonorID
WHERE d.DonorID = 59034;
您缺少WHERE
关键字,也缺少用于显式联接的ON
关键字。
答案 1 :(得分:1)
出现错误的原因是因为列DonorID
出现在两个表中,所以SQL引擎不知道在SELECT
列表中显示哪个值,或者在WHERE
子句中要过滤哪个值。
为了避免此错误并提高可读性,最佳实践是为表名添加别名,然后将这些表别名应用于查询中任何位置出现的每个列名。它消除了运行时对SQL引擎的歧义,为您在需要对查询进行故障排除时为您消除了歧义,为您的伙伴(不是您时必须承担轮班轮换的伙伴)以及为您负责工作的人消除了歧义。你继续前进。
关于您的JOIN
语法,我强烈希望使用ANSI-92显式连接,但是奇怪的是,宗教战争仍在肆虐。看看this pretty old post双方的论点。