2010-12-04 50 views
1

J'ai deux tables:Comment puis-je vérifier si la colonne n'a aucune valeur lorsque le joint gauche est utilisé?

family:

| Position | Age | 
| Dad  | 41 | 
| Mom  | 45 | 
| Daughter | 17 | 
| Dog  |  | 

et food:

| Meal   | Position | 
| Steak  | Dad  | 
| Salad  | Mom  | 
| Spinach Soup |   | 
| Tacos  | Dad  | 

-je faire la requête suivante:

`SELECT family.Position, food.Meal ". 
"FROM family LEFT JOIN food ". 
    "ON family.Position = food.Position`. 

et je reçois le résultat suivant:

Dad  - Steak 
Dad  - Tacos 
Mom  - Salad 
Daughter - 
Dog  - 

Maintenant je veux avoir seulement ces lignes qui ne contiennent aucune valeur pour la nourriture (c.-à-d. les deux derniers rangs avec Fille et Chien). Comment puis-je obtenir ces lignes? Puis-je utiliser where foof.Meal is null? La colonne Repas doit-elle avoir certaines propriétés pour rendre cette requête possible?

Répondre

3

Vous étiez presque là. Tout ce qui est nécessaire maintenant est explicitement indiqué que le côté droit de l'équation devrait être NULL.

Déclaration SQL

SELECT family.Position 
     , food.Meal 
FROM  family LEFT JOIN 
     food ON family.Position = food.Position 
WHERE food.Meal IS NULL 

De l'Reference Manual

S'il n'y a pas de ligne correspondante pour la table juste à ON ou en utilisant une partie de LEFT JOIN, un ligne avec toutes les colonnes définie sur NULL est utilisée pour la table droite. Vous pouvez utiliser ce fait pour trouver lignes d'une table qui n'ont pas correspondances dans une autre:

2

Il y a plus d'une solution.

L'une d'elle est l'ajustement de votre WHERE condition, comme ...

SELECT family.Position, food.Meal 
FROM family 
LEFT JOIN food ON family.Position = food.Position 
WHERE food.Meal IS NULL; 
0

je ne sais pas comment le faire, mais mysql sql server

SELECT family.Position, food.Meal ". "FROM family LEFT JOIN food ". "ON family.Position != food.Position. 
1

utilisation « où repas est null "et cela fonctionne même si" repas "n'est pas" nul ".