ensemble vide lors de la sélection des données dans la base de données relationnelle MySQL
-
19-09-2019 - |
Question
J'ai une base de données MySQL relationnelle avec des dizaines de tables ... Ma requête est longue de 1000 pieds et sélectionne les données de presque toutes les tables ... J'ai aussi ma table « principale », et toutes les autres tables faites référence à ce un. Quand j'entre une ligne dans ma table principale et lorsque je crée toutes les relations pour cette ligne dans d'autres tables ma requête fonctionne très bien. Cependant, si j'entre une ligne dans le tableau principal et nulle part ailleurs je reçois ensemble vide. Mais je voudrais obtenir au moins cette information dans mon résultat. Ou, bien sûr, toutes les informations qui sont entrées dans d'autres tableaux, indépendamment du fait que certaines tables ne disposent pas d'informations de cet enregistrement (ligne) ...
Merci pour l'aide!
Mise à jour:
Je ne pas utiliser la syntaxe et JOIN ma requête ressemble à ceci:
$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";
La solution
Votre question est très vague pour l'instant, mais très probablement il est dû au fait que vous utilisez INNER JOIN
s au lieu des LEFT JOIN
s.
Cette requête:
SELECT *
FROM main
JOIN secondary
ON secondary.main_id = main.id
retournera rien si secondary
est vide.
Cette requête:
SELECT *
FROM main
LEFT JOIN
secondary
ON secondary.main_id = main.id
retourne au moins un enregistrement pour chaque enregistrement main
, en remplaçant les champs secondaires avec NULL
s s'il n'y a aucun enregistrement correspondant à secondary
.
Mise à jour:
Syntaxe Implicit JOIN
que vous utilisez (les tables et l'énumération fournissant les conditions de JOIN
dans la clause WHERE
) suppose INNER JOIN
s.
Si l'on suppose que a
est la table "principale", réécrire votre requête comme ceci:
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