使用 JOIN 进行 SQL Server 分页 - 列名“id”不明确
Posted
技术标签:
【中文标题】使用 JOIN 进行 SQL Server 分页 - 列名“id”不明确【英文标题】:SQL Server pagination with JOIN - Ambiguous column name 'id' 【发布时间】:2016-09-29 01:22:56 【问题描述】:我在修复一个通常在没有 JOIN 的情况下使用的查询时遇到了麻烦,但现在我想 JOIN 几个表,我看到一个错误的列名 id 不明确。
SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]不明确的列名 'id'.1
我使用的代码:
SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY id desc)
AS RowNumber,
d.id as iddr, d.EGN, d.Names, d.NickName, d.Residence, d.PersonalMobilePhone, d.HomeAddress,d.GarantPerson, d.InsertDate,
t.id, t.PossitionName,
de.id, de.IdDriver, de.IdPAFirms,de.IdPossition
FROM dbo.Driver d
FULL JOIN dbo.DriversEmployed de ON d.id = de.IdDriver
FULL JOIN dbo.CompanyPossitions t ON de.IdPossition = t.id)
AS TEST
WHERE RowNumber BETWEEN ? AND ? + 1
如果我只尝试加入管理 SQL 工作室,则代码 JOIN 成功。所以我想麻烦id
在这里 ORDER BY id 子句。
有没有办法在这个查询中使用 JOIN? 谢谢!
【问题讨论】:
您需要在ROW_NUMBER() OVER (ORDER BY id DESC)
中为id
加上正确的表别名。
【参考方案1】:
在您的ROW_NUMBER
函数中:
ROW_NUMBER() OVER (ORDER BY id DESC) AS RowNumber
您需要通过使用正确的表别名作为前缀来指示列id
来自哪个表,即
ROW_NUMBER() OVER (ORDER BY d.id DESC) AS RowNumber
另外,您需要为相似的列分配不同的列别名:
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY d.id DESC) AS RowNumber,
d.id AS iddr, -- Here
d.EGN,
d.Names,
d.NickName,
d.Residence,
d.PersonalMobilePhone,
d.HomeAddress,
d.GarantPerson,
d.InsertDate,
t.id AS CompanyPossitionsId, -- Here
t.PossitionName,
de.id AS DriversEmployedId, -- Here
de.IdDriver,
de.IdPAFirms,
de.IdPossition
FROM dbo.Driver d
FULL JOIN dbo.DriversEmployed de
ON d.id = de.IdDriver
FULL JOIN dbo.CompanyPossitions t
ON de.IdPossition = t.id
) AS TEST
WHERE
RowNumber BETWEEN ? AND ? + 1
【讨论】:
谢谢,我尝试了这个但其他错误: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]列 'id' 被多次指定为 'TEST' .1 谢谢,我明白了。【参考方案2】:Driver
和 CompanyPositions
表都有一个 id
列,这使得名称 id
不明确。您应该在 order by
子句中完全限定它。例如:
ORDER BY t.id
【讨论】:
谢谢,我尝试了这个但其他错误: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]列 'id' 被多次指定为 'TEST' .1以上是关于使用 JOIN 进行 SQL Server 分页 - 列名“id”不明确的主要内容,如果未能解决你的问题,请参考以下文章