SQL-запрос для получения строк, в которых значения в столбце не существуют в другой таблице - PullRequest
3 голосов
/ 14 января 2010

У меня есть таблица продуктов со столбцом, который содержит разделенный пробелами список идентификаторов (например: «23 42 365»), столбец называется «категории». Номера относятся к идентификаторам строк в другой таблице (категориях).

Мне нужно извлечь все строки продукта, где все идентификаторы в списке, разделенном пробелами, указывают на строки в таблице категорий, которые больше не существуют.

Я знаю, что это далеко не лучший дизайн базы данных, однако мне было предложено это задание на более старой системе. Я даже не уверен, что это можно сделать полностью с помощью оператора SQL, но из-за большого количества записей в таблице продукта было бы медленнее использовать логику PHP для определения возвращаемых строк. Тем не менее, если это единственный путь, это то, что я буду делать!

Ответы [ 2 ]

4 голосов
/ 14 января 2010
SELECT  m.*
FROM    mytable m
LEFT JOIN
        categories c
ON      FIND_IN_SET(c.id, REPLACE(m.categories, ' ', ','))
WHERE   c.id IS NULL
1 голос
/ 14 января 2010

Вы можете использовать внешнее объединение, чтобы получить недостающие строки, ища, где категория равна нулю.

http://dev.mysql.com/doc/refman/5.0/en/join.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...