ensemble vide lors de la sélection des données dans la base de données relationnelle MySQL

StackOverflow https://stackoverflow.com/questions/1709270

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";
Était-ce utile?

La solution

Votre question est très vague pour l'instant, mais très probablement il est dû au fait que vous utilisez INNER JOINs au lieu des LEFT JOINs.

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 NULLs 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 JOINs.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top