insieme vuoto durante la selezione dei dati nel database relazionale MySQL
-
19-09-2019 - |
Domanda
Ho qualche database MySQL relazionale con decine di tavoli ... La mia domanda è lungo 1000 ft e scelgono i dati provenienti da quasi tutte le tabelle ... ho anche la mia tabella 'principale', e tutte le altre tabelle si riferiscono a che uno. Quando entro una riga nella mia tabella principale e quando creo tutte le relazioni per quella riga in altre tabelle mia domanda funziona benissimo. Tuttavia, se entro una riga nella tabella principale e in nessun altro ricevo insieme vuoto. Ma mi piacerebbe ottenere almeno le informazioni in mio risultato. O, naturalmente, tutte le informazioni immesse in altre tabelle, a prescindere dal fatto che alcune tabelle non hanno le informazioni per il record (riga) ...
Grazie per l'aiuto!
Aggiornamento:
Non faccio uso di JOIN sintassi e la mia domanda è simile a questo:
$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
Soluzione
La tua domanda è molto vaga per ora, ma molto probabilmente è dovuto al fatto di utilizzare INNER JOIN
s invece dei LEFT JOIN
s.
Questa query:
SELECT *
FROM main
JOIN secondary
ON secondary.main_id = main.id
restituirà nulla se secondary
è vuoto.
Questa query:
SELECT *
FROM main
LEFT JOIN
secondary
ON secondary.main_id = main.id
restituirà almeno un record per ogni record nel main
, sostituendo campi secondari con NULL
s se non ci sono record corrispondenti nel secondary
.
Aggiornamento:
sintassi JOIN
implicito si utilizzano (enumerando le tabelle e fornendo le condizioni JOIN
nella clausola WHERE
) assume INNER JOIN
s.
Supponendo che a
è il tavolo "principale", riscrivere la query come questa:
SELECT a.*, b.*, c.*, d.*, e.*, f.*
FROM a
LEFT JOIN
b
ON b.aID = a.aID
LEFT JOIN
с
ON c.bID = b.bID
LEFT JOIN
d
ON d.bID = b.bID
LEFT JOIN
e
ON e.bID = b.bID
LEFT JOIN
f
ON f.bID = b.bID