PHP MySQL: получение строк из таблицы A, где значения столбца Z таблицы A отсутствуют в столбце Z таблицы B - PullRequest
1 голос
/ 22 июля 2010

У меня есть 2 таблицы элементов и item_relations

У элементов 4 столбца: row_id (первичный ключ), story_id, field1 и field2

item_relation сохраняет отношение между каждой строкой в ​​таблице элементов, в которой оно имеетстолбцы parent_story_id и child_story_id.В обоих столбцах хранятся story_id строк из элементов.

У родительского элемента может быть много дочерних элементов, а у дочернего элемента может быть 1 или более родительских элементов.но дочерний элемент не может иметь своих собственных дочерних элементов.

Теперь я хочу ВЫБРАТЬ строки из элементов, для которых items.story_id отсутствует в item_relation.child_story_id

Как мне это сделать?

1 Ответ

3 голосов
/ 22 июля 2010

Я хочу ВЫБРАТЬ строки из элементов, для которых items.story_id отсутствует в item_relation.child_story_id

Вы можете использовать NOT IN, NOT EXISTS или LEFT JOIN / WHERE ... NULL.

Пример с NOT IN:

SELECT *
FROM items
WHERE items.story_id NOT IN (
    SELECT child_story_id FROM item_relation
)

Пример с LEFT JOIN / WHERE ... НЕДЕЙСТВИТЕЛЕН:

SELECT items.*
FROM items
LEFT JOIN item_relation
ON items.story_id = item_relation.child_story_id
WHERE item_relation.child_story_id IS NULL

Пример с NOT EXISTS:

SELECT *
FROM items
WHERE NOT EXISTS (
    SELECT NULL
    FROM item_relation
    WHERE item_relation.child_story_id = items.story_id
)

В статье НЕ ВНУТРИ против НЕ СУЩЕСТВУЕТ ПРОТИВ против ЛЕВОГО СОЕДИНЕНИЯ / НУЛЬ: MySQL Quassnoi объясняет различия между этими методами и сравнивает их производительность , Краткое содержание:

Вот почему лучший способ поиска пропущенных значений в MySQL - это использовать LEFT JOIN / IS NULL или NOT IN, а не NOT EXISTS.

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