Jointure interne seulement si un champ n'est pas vide
J'aurais pu faire ce que je veux avec deux demande, mais je veux le faire avec un seul.
En fait, j'ai 4 tables avec :
Table 1 : id, sub-id
Table 2 : id, sub-id
Table 3 : id, login
Table 4 : id, login
- Je faire une demande comme ça :
SELECT Table1.id, Table1.sub-id, Table2.id, Table2.sub-id,
Table3.login, Table4.login FROM Table1
INNER JOIN Table2 ON (Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id)
INNER JOIN Table3 ON (Table3.id = Table1.id)
INNER JOIN Table4 ON (Table4.id = Table1.id)
WHERE Table1.id = "my_id" AND Table1.sub-id = "my_subid"
Je veux rejoindre Table3
seulement si id
n'est pas vide, si elle est vide, je me joins Table4
.
Avez-vous des idées s'il vous plaît ?
J'ai entendu dire qu'une jointure gauche pourrait aider, mais je ne suis pas habitué à ces mots-clés, donc ...?
Si vous pouvez garantir que les id dans le Tableau 3 et le Tableau 4 ne sera pas égale alors la requête ci-dessus ce serait bien. Sinon vous auriez besoin de regarder dow de la dynamique SQL route je pense.
Une Explication Visuelle de Jointures SQL
Une Explication Visuelle de Jointures SQL
OriginalL'auteur Sumz | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
Comme dit dans les autres réponses, vous pouvez utiliser une jointure gauche. Vous pouvez également ajouter cas de déclaration d'avoir un seul
login
colonne :COALESCE(Table3.login, Table4.login)
donne exactement le même résultat avec votreCASE ... END CASE
.dans ce cas précis, nous pouvons supposer que oui, mais étant donné que la maladie est sur le
id
colonne et nous voulons lelogin
colonne, ce n'est pas exactement équivalent, il y a certains cas où les résultats ne seront pas les mêmes.OriginalL'auteur krtek
Utiliser une jointure gauche:
Ensuite, les lignes de Tableau3 et Table4 seront rejoints si il y a un match. Sinon, ce sera
NULL
. Vous pouvez ensuite vérifier les résultats et l'utilisation de données à partir de Tableau3 si elle est présente, ou Table4 autrement.OriginalL'auteur Håvard S
Ce qui pourrait aider:
OriginalL'auteur jimy
Essayer quelque chose comme cela:
J'ai supprimé unnecesary parethensis pour réduire l'encombrement. Aussi, veuillez noter que la norme délimiteur de chaîne dans SQL est la seule citation.
Pas d'habitude sur moi 🙂
OriginalL'auteur Álvaro González
Si, pour tout
table1.id
, soit seulementtable3.id
ou seulementtable4.id
correspondent, vous pouvez utiliser ceci:Vous pouvez accepter Alvaro réponse. C'est la même que la mienne et il a posté en premier.
OriginalL'auteur ypercubeᵀᴹ