mysql external join - определить, существует ли объединенная строка - PullRequest
3 голосов
/ 30 июля 2011

У меня есть две таблицы с одним и тем же первичным ключом, но одна намного больше другой. Я хочу знать, какие идентификаторы имеют строку в меньшей таблице. (В этом примере a большой, а b маленький). Прямо сейчас я использую OUTER JOIN с CASE, чтобы определить, является ли значение b NULL или нет. Это не работает (всегда получая 1). Исправить это было бы хорошо, но должен быть лучший способ. Как мне это сделать?

SELECT a.id,
       CASE b.id
         WHEN NULL THEN 0
         ELSE 1
         END AS exists
FROM a LEFT OUTER JOIN b
  ON a.id=b.id;

Ответы [ 2 ]

6 голосов
/ 30 июля 2011

это та же логика, что вы показали, но более короткий код:

SELECT a.id,NOT ISNULL(b.id) AS exists
FROM a LEFT OUTER JOIN b
  ON a.id=b.id;
3 голосов
/ 30 июля 2011

Нет. Проверка на NULL в столбцах внешнего ключа - это именно то, как вы это делаете.

Однако, ничто не может быть равным NULL (это не значение), поэтому ваш CASE переходит в часть ELSE. Вам нужно использовать IS NULL, чтобы проверить, является ли столбец NULL.

CASE WHEN b.id IS NULL THEN ...
...