Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server分页与联接-不明确的列名';id';_Sql Server_Join_Pagination - Fatal编程技术网

Sql server SQL Server分页与联接-不明确的列名';id';

Sql server SQL Server分页与联接-不明确的列名';id';,sql-server,join,pagination,Sql Server,Join,Pagination,我在修复一个查询时遇到了问题,这个查询通常在没有联接的情况下使用,但现在我想联接两个表,我发现一个错误是列名称id不明确 SQLSTATE[42000]:[Microsoft][SQL Server本机客户端11.0][SQL Server]列名“id”不明确。1 我使用的代码: SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY id desc) AS RowNumber,

我在修复一个查询时遇到了问题,这个查询通常在没有联接的情况下使用,但现在我想联接两个表,我发现一个错误是列名称id不明确

SQLSTATE[42000]:[Microsoft][SQL Server本机客户端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 studio,那么代码将成功加入。所以我想麻烦就在这里,orderbyid子句

有没有办法在这个查询中使用JOIN?
谢谢大家!

您的
Driver
CompanyPositions
表都有
id
列,使得名称
id
不明确。您应该在
order by
子句中对其进行完全限定。例如:

ORDER BY t.id

在您的
行号
功能中:

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

您需要在
行(按id DESC排序)上方的
id
前面加上正确的表别名。
。谢谢,我尝试了此操作,但出现了其他错误:SQLSTATE[42000]:[Microsoft][SQL Server Native Client 11.0][SQL Server]列“id”已多次为“TEST”指定。1谢谢,我尝试了此操作,但出现了其他错误:SQLSTATE[42000]:[Microsoft][SQL Server Native Client 11.0][SQL Server]为“测试”多次指定了列“id”。1谢谢,现在我明白了。