2016-05-31 6 views
1

通常はJOINなしで使用する1つのクエリを修正するのに問題がありますが、今はテーブルのいくつかにJOINしたいのであいまいな列名IDに対して1つのエラーが表示されます。私が使用JOINを使用したSQL Serverのページング - あいまいな列名 'id'

SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Ambiguous column name '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スタジオに登録しようするコードがsuccesfullの登録しよう。だから私は問題idここにORDER BYのid句があると思います。

このクエリでJOINを使用する方法はありますか? ありがとうございました!

+0

'id'の前に' ROW_NUMBER()OVER(ORDER BY id DESC) 'の適切なテーブルエイリアスを付ける必要があります。 –

答えて

1

あなたは適切な表の別名でそれを付けることによって、カラム idからなるテーブルから指定する必要があり
ROW_NUMBER() OVER (ORDER BY id DESC) AS RowNumber 

、すなわち

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 
+0

ありがとう、私SQLSTATE [42000]:[Microsoft] [SQL Serverネイティブクライアント11.0] [SQL Server]列 'ID'が 'TEST'のために複数回指定されました。 – Nasko

+0

@Hacko、更新された回答を参照してください。 –

+1

ありがとう、今私は理解する。 – Nasko

0

DriverCompanyPositionsの両方の表にはidの列があり、名前はidがあいまいです。 order by句で完全に修飾する必要があります。例:

あなた ROW_NUMBER機能で
ORDER BY t.id 
+0

SQLSTATE [42000]:[Microsoft] [SQL Serverネイティブクライアント11.0] [SQL Server] 'ID'列が 'TEST'.1に複数回指定されました – Nasko

関連する問題