2010-12-04 21 views
1

我有兩個表:如何在使用左連接時檢查列是否沒有任何值?

family

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

food

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

我做下面的查詢:

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

,我得到以下結果:

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

現在我想只有那些不包含任何食物值的行(即最後兩行與女兒和狗)。我怎樣才能得到這些行?我可以使用where foof.Meal is null嗎? 膳食欄是否必須具有某些屬性才能使此查詢成爲可能?

回答

3

你幾乎在那裏。

現在需要的只是明確指出方程的右邊應該爲NULL。

SQL語句

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

Reference Manual

如果在ON的 右表或 使用部分LEFT JOIN,一個不匹配的行將所有列 設置爲NULL的行用於右表 表。你可以利用這一點來在表中查找 行有沒有 對應於另一個表:

2

有多個解決方案。

其中之一是調整你的WHERE條件,如...

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

我不知道該怎麼做MySQL,但SQL Server的

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

使用「,其中餐空「,即使」用餐「是」不爲空「也可以工作。

相關問題