Сведения о вопросе

ЧОВИД

11:00, 27th August, 2020

Теги

MySQL    

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

Просмотров: 373   Ответов: 6

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

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

Не пойму как это сделать такой запрос?
Понятно когда данные в двух таблицах, но когда список в запросе запрос становится не очевидно.



  Сведения об ответе

$DOLLAR

14:53, 18th August, 2020

эээ…
SELECT * 
FROM table 
WHERE 
    item_id IN (2, 3, 5) 
AND 
    item_id NOT IN (SELECT item_id FROM table);


  Сведения об ответе

padenie

22:57, 24th August, 2020

А если создать временную таблицу?


  Сведения об ответе

VERSUION

00:53, 7th August, 2020

Собирать из 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) такой вариант будет наиболее быстрым и будет работать за вменяемое время даже для большого количества элементов.


  Сведения об ответе

baggs

07:10, 28th August, 2020

А про оператор EXCEPT кто-нибудь помнит?

SELECT 2 AS item_id
UNION
SELECT 3 AS item_id
UNION
SELECT 5 AS item_id
EXCEPT
SELECT item_id FROM table


  Сведения об ответе

crush

14:05, 27th August, 2020

Первое, что пришло в голову (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


  Сведения об ответе

park

06:51, 2nd August, 2020

Ещё можно так:
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 у меня работает.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться