Aider regading pas et inner join
J'ai deux tables. Table1 et Table2
Table1
id tid
1 100
2 200
3 300
Table2
tid name
100 A
200 B
Je veux prendre l'id des enregistrements de la table Table1 selon tid n'est pas présent dans la Table2.
Ma sortie devrait ressembler à ceci.
Table1.id
3
Pour ce que j'ai écrit à la suite des requêtes, mais il prend trop de temps. Depuis
les deux tables ont plus de quantité de dossiers.
s'il vous plaît aider moi comment écrire une requête pour cela d'une façon telle qu'il faudra moins de quantité de temps.
select id from Table1 where tid not in (select tid from Table2)
select a.id from Table1 a inner join Table2 b on a.tid<>b.tid
TIA.
- Votre deuxième question sera de près de calculer un produit cartésien et supprimer uniquement un petit nombre de lignes. Ce n'est certainement pas ce que vous voulez.
Vous devez vous connecter pour publier un commentaire.
Utiliser une jointure gauche, puis utiliser la clause where pour filtrer uniquement les lignes où la jointure n'a pas fonctionné:
Bien sûr, cela peut ne pas travailler assez vite, dans ce cas, vous devez vérifier si vous avez des indices sur le tid colonnes dans ces deux tableaux.
Comment sur
ensemble des opérations (moins la partie ci-dessus) sont assez rapide dans Oracle
D'abord créer des index:
Cette manière, il pourrait être plus rapide.
Concernant la requête, ce à propos de:
Vous pouvez essayer "n'existe pas" trop:
select * from Table1 T1 où n'existe pas
(select 1 from Table2 T2 where T1.tid=t2.tid);