Mysql Seleziona record fittizio quando la condizione di join non è soddisfatta
-
28-10-2019 - |
Domanda
Ho due tabelle, una record di colpi, l'altra una tabella utente. Se come utente viene effettuato l'accesso, il hit viene registrato con l'ID di quell'utente. Se l'utente non viene effettuato, il hit viene registrato come user_id = 0
Quando eseguo un report, voglio unirmi ai successi contro la tabella degli utenti per ottenere il nome utente-ma non c'è nessun utente con l'ID 0, quindi ottengo i dati negativi (ad es. Nessun risultato per tutti i successi non universitari ). C'è un modo per selezionare un nome utente fittizio come "ospite" in cui la condizione di join non è soddisfatta?
Ecco la domanda:
SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id, b.username
FROM hits a
JOIN users b ON a.user_id = b.id
WHERE 1
Soluzione
Prova a sinistra join e coalesce a default
SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id,
COALESCE( b.username, 'GUEST')
FROM hits a
LEFT JOIN USERS b ON a.user_id = b.id
Altri suggerimenti
Devi fare un join esterno sinistro; Ciò ti restituirà i record che hanno una voce user_id nella tabella HITS in cui l'utente non esiste nella tabella degli utenti.