Как я могу проверить, не имеет ли столбец никаких значений при использовании левого соединения? - PullRequest
1 голос
/ 04 декабря 2010

У меня есть две таблицы:

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? Должен ли столбец Meal иметь определенные свойства, чтобы этот запрос был возможен?

Ответы [ 4 ]

3 голосов
/ 04 декабря 2010

Вы были почти там.

Все, что сейчас нужно, это прямо указать, что правая часть уравнения должна быть NULL.

SQL-оператор

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

Из справочного руководства

Если для правой таблицы в части ON или USING в левом соединении нет подходящей строки, строка со всеми столбцами установлена ​​вNULL используется для правой таблицы.Вы можете использовать этот факт для поиска строк в таблице, которые не имеют аналогов в другой таблице:

2 голосов
/ 04 декабря 2010

Существует более одного решения.

Одним из них является настройка вашего WHERE-состояния, например ...

SELECT family.Position, food.Meal 
FROM family 
LEFT JOIN food ON family.Position = food.Position
WHERE food.Meal IS NULL;
1 голос
/ 04 декабря 2010

Используйте «где еда ноль», и это работает, даже если «еда» не «ноль».

0 голосов
/ 04 декабря 2010

Я не знаю, как это сделать MySQL, но сервер SQL

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