Comment faire pour joindre plusieurs instructions select en SQL
Je voudrais savoir comment faire une requête de ce formulaire pourrait être amélioré en termes d'1) de Style et de 2) la Performance. En cas de questions, je suis à l'aide d'Oracle que ma base de données. Aussi, le but de cette requête est de sélectionner tous les enregistrements de la première instruction select qui n'ont pas d'enregistrement correspondant dans le jeu d'enregistrements à la droite de la GAUCHE REJOINDRE. Les enregistrements de ColumnA ne sont pas nécessairement unique dans toutes les tables.
select ColumnA
from
(Select ColumnA
from Table1)
left join
((select ColumnA, ColumnB
from Table2)
union
(select ColumnA, ColumnB
from Table3))
using (ColumnA)
where ColumnB is null
group by ColumnA;
Merci.
En raison de left join et null tests: est-ce que les colonnes définies comme not NULL?
Oui, ni la colonne est NULL dans la base de données.
Oui, ni la colonne est NULL dans la base de données.
OriginalL'auteur Eduardo | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Je pense que tu pourrais réécrire cette requête à la suivante (voir ce SQL Violon):
Comme pour le style, je vous recommande d'utiliser de manière explicite de la condition de jointure syntaxe
LEFT JOIN ... ON table1.somecolumn = table2.someothercolumn
au lieu de laUSING
état, pour des raisons de lisibilité et de clarté. Mais c'est peut-être la préférence personnelle 🙂Vous devriez utiliser pour EXPLIQUER le PLAN de comparer les plans d'exécution des requêtes. Voici une des dernières DONC post sur ça: stackoverflow.com/questions/15576158/...
OriginalL'auteur Josien
Je ne vois pas la nécessité pour le
UNION
:Une autre option serait d'utiliser
NOT IN
:Ces deux doivent retourner tout ColumnA enregistrements dans le tableau 1 qui ne sont pas dans la Table2 ou Tableau3.
select distinct ColumnA
.tout à fait correct, oublié de le groupe!
J'ai demandé à ce sujet ci-dessous, mais il s'applique ici à cette réponse. Autant que le style est concerné, est-il une préférence entre l'utilisation de jointures ou des sous-requêtes?
Vous devez utiliser
AND
au lieu deOR
dans la clause where de votre première requêteOriginalL'auteur sgeddes
Voici trois alternatives.
.
.
Vous devez utiliser
AND
au lieu deOR
dans la clause where de votre première requêtemerci vous avez raison.
OriginalL'auteur Ronnis