2009-07-24 8 views
1

J'essaie d'afficher tous les noms de la table vocabulary où les vid ne correspondent pas à vid en collapse_menu. Comment ferais-je cela?Comment sélectionner les lignes d'une table qui ne correspondent pas à une autre table dans SQL?

Table vocabulary 
    vid  name 
    1 Sections 
    2 Posts 
    6 Forums 
    5 Departments 
    13 Free Tags 
    8 Committees 
    9 Training and Workshops 
    10 Policies 
    12 Projects 
    14 Teams 

Table collapse_menu 
vid 
8 
5 
10 
+2

S'il vous plaît apprendre l'art de 'Titre descriptif Fu. Il vous aidera dans vos voyages. –

Répondre

4

select name de vocubulary où vid pas (sélectionnez vid de collapse_menu)

+0

ou utilisez "WHERE NOT EXIST (sous-select)" –

-2
select name 
from vocabulary as v, 
    collapse_menu as c 
where v.vid!=c.vid 

Edit: Désolé, n'a pas lu la question correctement.

1

SELECT * FROM vocabulaire, collapse_menu OÙ vocabulary.vid <> collapse_menu.vid;

12

Je suppose que vous demandez ces noms dans le vocabulaire, où la vid ne se trouve pas dans la table collapse_menu.

Dans ce cas

SELECT name 
FROM vocabulary 
LEFT JOIN collapse_menu ON vocabulary.vid = collapse_menu.vid 
WHERE collapse_menu.vid IS NULL 
+0

Bingo. Certaines des autres suggestions fonctionneront pour une situation simple, mais c'est la technique à retenir pour les cas complexes. – SeaDrive

+0

Ceci devrait être la réponse acceptée. La même technique est utile lors du calcul des "maxima groupés", c'est-à-dire que pour chaque groupe, la valeur max est renvoyée. Ensuite, par définition de valeur maximale, nous pouvons transformer le problème en "exclure tout ce qui a une plus grande valeur == prendre tout ce qui n'a pas de plus grande valeur" en rejoignant la table avec lui-même et voila '. – namero999

Questions connexes