Как я могу найти все результаты с нулевым внешним ключом в MySQL? - PullRequest
2 голосов
/ 19 августа 2010

У меня есть 2 таблицы ... meat и potatoes в MySQL.

meat_id - это первичный ключ для таблицы meat, а в * 1008 есть meat_id* таблица, которая связывает 2 таблицы.Я хочу найти все строки в таблице potatoes, у которых нет действительного meat_id.Есть идеи?

Ответы [ 3 ]

4 голосов
/ 19 августа 2010

Использование LEFT JOIN / IS NULL:

   SELECT p.*
     FROM POTATOES p
LEFT JOIN MEAT m ON m.meat_id = p.meat_id
    WHERE m.meat_id IS NULL

Использование NOT EXISTS:

SELECT p.*
  FROM POTATOES p
 WHERE NOT EXISTS(SELECT NULL
                    FROM MEAT m
                   WHERE m.meat_id = p.meat_id)

Использование NOT IN:

SELECT p.*
  FROM POTATOES p
 WHERE p.meat_id NOT IN (SELECT m.meat_id
                           FROM MEAT m)

Сводка

LEFT JOIN / IS NULL является наиболее эффективным вариантом, если сравниваемые столбцы в соединении не могут иметь значение NULL .Если эти значения могут быть NULL , тогда NOT EXISTS или NOT IN работают лучше .

2 голосов
/ 19 августа 2010
 SELECT *
 FROM potatoes p
 WHERE NOT EXISTS (SELECT 1 from meat m where m.meat_id = p.meat_id)
0 голосов
/ 19 августа 2010

Выполните левое соединение и используйте:

SELECT p.potato_id, m.meat_id
FROM potatos p
LEFT JOIN meat m ON p.meat_id = m.meat_id
HAVING m.meat_id IS null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...