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

OriginalL'auteur Sumz | 2011-05-12