Dołącz do tabeli z sobą i nadaj jej dwa różne aliasy (A i B) . Pozwala to na porównanie różnych wierszy tej samej tabeli.
SELECT DISTINCT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id AND A.[Adress Code] < B.[Adress Code]
WHERE
A.Address <> B.Address
z „mniej niż” porównanie <
gwarantuje, że masz 2 różne adresy i nie dostać te same 2 kody adresowe dwukrotnie. Używanie zamiast "<>
" spowoduje, że kody będą (1, 2) i (2, 1); każdy z nich dla aliasu A
i aliasu B
.
Klauzula łączenia jest odpowiedzialna za parowanie wierszy, gdzie jako klauzula where sprawdza dodatkowe warunki.
UPDATE:
Zapytanie powyżej współpracuje ze wszystkimi kodami adresowymi. Jeśli chcesz porównać adresy konkretnych kodach adresowych, można zmienić zapytanie do
SELECT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id
WHERE
A.[Adress Code] = 1 AND
B.[Adress Code] = 2 AND
A.Address <> B.Address
sobie wyobrazić, że może to być przydatne, aby znaleźć klientów posiadających adres rozliczeniowy (kod Property = 1 jako przykład) różniące się od adres dostawy (kod adresu = 2).
Super! Co próbujesz? –
Które RDBMS? Jeśli SQL Server, spróbuj spojrzeć na [to pytanie] (http://stackoverflow.com/q/510916/1220971). – Bridge
Przepraszam, używam tego w Teradata. –