Mam kwerendy SQL, który nie wykona:Dlaczego to zapytanie SQL powoduje błąd "Niejednoznaczna nazwa kolumny"?
select p.PersonID, CreatedDate, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
tabela Person
ma PK PersonID
(int). Widok PotentiallyFraudulentPeople
jest zapytaniem tabeli Person
połączonej z innymi tabelami, aby zdecydować, czy ufamy danej osobie, czy nie. Widok PotentiallyFraudulentPeople
ma tylko jedną kolumnę: PersonID
.
Kiedy próbuję wykonać to zapytanie, otrzymuję ten błąd:
Msg 209, Level 16, State 1, Line 3
Ambiguous column name 'CreatedDate'.
Rozumiem, że błąd ten mówi mi, że nazwa CreatedDate
kolumna jest niejednoznaczne i muszę poprzedzić go z aliasu mojego stołu, "p".
Ta kwerenda działa:
select p.PersonID, CreatedDate, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by p.CreatedDate
Co ja nie rozumiem, dlaczego muszę użyć „p” alias w rachunku ORDER BY
i nie ma na liście SELECT
kolumny. Ponadto nie rozumiem, dlaczego muszę w ogóle używać aliasu tabeli, ponieważ w widoku PotentiallyFraudulentPeople
nie ma nawet kolumny CreatedDate
.
Czy ktoś może wyjaśnić to dziwne zachowanie?
Używam programu SQL Server 2008 i SSMS do wykonania zapytania.
UPDATE
Również próbowałem usunięciu kolumny CreatedDate
z mojej listy SELECT
kolumny, a następnie zapytanie nie wymaga „p” alias w ORDER BY
. Tak więc to zapytanie działa również:
select p.PersonID, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
brzmi to jak dziwne zachowanie programu SQL Server, ale to wyjaśnia mój problem. Dzięki! Przyjmuję tę odpowiedź tak szybko, jak tylko mogę. –
Po prostu miałem ten problem i to była przyczyna, nie zdawałem sobie sprawy, że to był problem z zamówieniem przez – MichaelF