Porównaj ceny domen i usług IT, sprzedawców z całego świata

Jak poprawnie podwoić JOIN w SQL


Próbuję wybrać wszystkie
transakcje
z miastem billing_address w „Nowym Jorku”, ale z miastem shipping_address nie w „Nowym Jorku”. Problem, z którym się zmagam, polega na tym, że patrząc na tabelę
transakcje
, są dwie kolumny (
shipping_address_id
i
billing_address_id
), w których odpowiadający identyfikator oba są przechowywane w
address_table
jako dwa oddzielne wpisy.
Ponieważ muszę sprawdzić, czy adres dostawy/fakturowania to „Nowy Jork” dla obu tych kolumn w tabeli
transakcje
, próbuję wykonać podwójne połączenie z
address_table
w moim zapytaniu, chociaż wydaje się, że nie działa zgodnie z oczekiwaniami. Czy ktoś widzi, gdzie idę źle? Podziękować!
SELECT billing.id AS billing_address, shipping.id AS shipping_address
FROM transactions AS t
LEFT JOIN address_table AS billing
ON t.billing_address_id = billing.id
AND billing.city = 'New York'
AND t.billing_address_id IS NOT NULL
LEFT JOIN address_table AS shipping
ON t.shipping_address_id = shipping.id
AND shipping.city != 'New York'
AND t.shipping_address_id IS NOT NULL;

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zakładając, że dobrze rozumiem, wystarczy użyć
sprzężenia wewnętrznego
:
SELECT t.*,
b.id AS billing_address,
s.id AS shipping_address
FROM transactions AS t
JOIN address_table AS b ON t.billing_address_id = b.id
JOIN address_table AS s ON t.shipping_address_id = s.id
WHERE b.city = 'New York' AND
s.city != 'New York'

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się