2009-11-10 4 views
0

J'ai une base de données relationnelle MySQL avec des dizaines de tables ... Ma requête fait 1000 pieds de long et sélectionne les données de presque toutes les tables ... J'ai aussi ma table 'principale' , et tous les autres tableaux font référence à celui-là. Lorsque j'entre une ligne dans ma table principale et que je crée toutes les relations pour cette ligne dans d'autres tables, ma requête fonctionne correctement. Cependant, si j'entre une rangée dans la table principale et nulle part ailleurs, je serai 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 tables, indépendamment du fait que certaines tables n'ont pas d'informations pour cet enregistrement (ligne) ...Ensemble vide lors de la sélection de données dans la base de données relationnelle MySQL

Merci pour votre aide!

Mise à jour:

Je ne l'utilise pas et syntaxe 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"; 
+0

Peut-on voir la requête? Votre question est assez abstraite. –

+0

Votre question telle qu'elle est maintenant est sans réponse. Veuillez publier votre schéma, la requête et quelques exemples de données. – Quassnoi

Répondre

3

Votre question est très vague pour l'instant, mais très probablement elle est due à la En fait, vous utilisez INNER JOIN s au lieu de LEFT JOIN s.

Cette requête:

SELECT * 
FROM main 
JOIN secondary 
ON  secondary.main_id = main.id 

renverra rien si secondary est vide.

Cette requête:

SELECT * 
FROM main 
LEFT JOIN 
     secondary 
ON  secondary.main_id = main.id 

renverra au moins un enregistrement pour chaque enregistrement main, en remplaçant les champs secondaires avec NULL s s'il n'y a pas enregistrements correspondants dans secondary.

Mise à jour:

Implicite JOIN syntaxe que vous utilisez (les tables et l'énumération fournissant les JOIN conditions dans la clause WHERE) assume INNER JOIN s.

En supposant 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 
+0

Cela fonctionne comme prévu ... Je pensais qu'il n'y a pas de différence entre vos requêtes et les miennes, mais c'est évidemment ce que je cherchais! Merci beaucoup pour votre aide ... – errata

Questions connexes