Unire la tabella con se stessa e assegnargli due alias diversi (A e B) . Ciò consente di confrontare diverse righe della stessa tabella.
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
Il "meno" rispetto <
assicura che si ottiene 2 indirizzi diversi e non si ottiene gli stessi 2 codici di indirizzo due volte. Usando "non uguale" <>
invece, si otterrebbero i codici come (1, 2) e (2, 1); ognuno di essi per l'alias A
e l'alias B
a turno.
La clausola join è responsabile per l'associazione delle righe in cui la clausola where verifica condizioni aggiuntive.
UPDATE:
La query sopra funziona con qualsiasi codici di indirizzo. Se si desidera confrontare gli indirizzi con codici di indirizzo specifici, è possibile modificare la query per
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
immagino che questo potrebbe essere utile per trovare i clienti che possiedono un indirizzo di fatturazione (Codice Indirizzo = 1 come esempio) diverso dal indirizzo di consegna (Codice indirizzo = 2).
fonte
2012-12-04 17:15:52
Cool! Che cosa hai provato? –
Quale RDBMS? Se SQL Server, prova a guardare [questa domanda] (http://stackoverflow.com/q/510916/1220971). – Bridge
Mi dispiace, sto usando questo all'interno di Teradata. –