Ho le tabelle users
, locations
e una tabella di join. La tabella di join ha anche un valore di classificazione per ogni individuo in quella posizione, perché questi individui hanno ranghi più alti in determinate località rispetto ad altre posizioni.Che tipo di Join per vedere i valori inesistenti nella tabella Join?
users
=========
id | name
=========
1 | john
2 | bob
3 | alex
locations
===============
id | name
===============
1 | san diego
2 | dallas
3 | new york
4 | denver
join_users_locations
==============================
user_id | location_id | rank
==============================
2 | 1 | 4
2 | 2 | 3
2 | 4 | 2
3 | 1 | 2
3 | 2 | 4
Si può vedere che nella tabella di join un utente viene elencato solo se ha una classifica in quella posizione. Non sono nemmeno nella tabella se il loro rango è zero/nullo.
Sono voler ottenere i risultati delle query come questo:
name | location | rank
=======================
bob | san diego | 4
bob | dallas | 3
bob | new york | 0
bob | denver | 2
Come potete vedere, voglio tutte le sedi di essere nella lista, anche quelli che l'utente non si unisce con (solo dare quei campi un valore di rango pari a zero).
E 'facile per ottenere l'elenco delle posizioni e si classifica per le posizioni che lui/lei si unisce con:
SELECT
u.name,
FROM users u
LEFT JOIN join_users_locations jul ON jul.user_id = u.id
LEFT JOIN locations l ON l.id = jul.location_id
WHERE u.id = 2
Ma che elenca solo ciò che posizioni che l'utente si unisce con. Voglio vedere anche le posizioni non associate.
So che questo è possibile, ma non sono sicuro di quale sia la soluzione. Ho provato diversi tipi di JOIN con vari risultati.
Hai provato a sinistra outer join? – Ciprian