Выбрать значения которых нет в таблице

Здравствуйте.

В таблице значения колонки item_id состоят из номеров 1, 2, 3, 4. У меня есть список из чисел 2, 3, 5. Нужен такой запрос который вернёт только 5, то есть значения которого нет в таблице но есть в запросе.

Не пойму как это сделать такой запрос?
Понятно когда данные в двух таблицах, но когда список в запросе запрос становится не очевидно.
  • Вопрос задан
  • 11067 просмотров
Пригласить эксперта
Ответы на вопрос 6
@kirsan_vlz
эээ…
SELECT * 
FROM table 
WHERE 
    item_id IN (2, 3, 5) 
AND 
    item_id NOT IN (SELECT item_id FROM table);
Ответ написан
@Naps
А если создать временную таблицу?
Ответ написан
mgyk
@mgyk
Собирать из 2,3,5 темповую таблицу. Делать SELECT a.id my_tmp_table as a LEFT JOIN my_values as b on a.id=b.id WHERE isnull(b.id) такой вариант будет наиболее быстрым и будет работать за вменяемое время даже для большого количества элементов.
Ответ написан
Комментировать
tyomitch
@tyomitch
А про оператор EXCEPT кто-нибудь помнит?

SELECT 2 AS item_id
UNION
SELECT 3 AS item_id
UNION
SELECT 5 AS item_id
EXCEPT
SELECT item_id FROM table
Ответ написан
Комментировать
andrei202
@andrei202
Первое, что пришло в голову (MySQL):
SELECT tmp.id
FROM (
SELECT 2 AS id
UNION
SELECT 3 AS id
UNION
SELECT 5 AS id
) tmp
LEFT JOIN table t c ON ( t.item_id = tmp.id )
WHERE t.item_id IS NULL
Ответ написан
@kirsan_vlz
Ещё можно так:
SET @var = '{2}{3}{5}';
SELECT 
SUBSTRING
(
    @var := REPLACE
    (
        (	
            SELECT @var := REPLACE(@var, concat('{', `item_id`, '}'), '') AS `ids`
            FROM `table` 
            ORDER BY `ids` DESC 
            LIMIT 0,1
        ),
        '}{', 
        ','
    ), 
    2, 
    length(@var) - 2
)

Строку '{2}{3}{5}', скриптом формируете.
Для одной записи запрос вернёт '5', для нескольких, например '5,6,7'.
В MySQL у меня работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы