Mysql запрос, если не существует - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужна помощь для запроса, может быть, это легко, но мне не удалось найти способ.

У меня есть таблица T с большим количеством строк.Один из столбцов C, содержит идентификатор.Кроме того, у меня есть список L с идентификатором:

таблица T:

- id1
- id2
- id3

список L, который не является таблицей, просто список:

id1, id3, id4

Я хочу найти в L все идентификаторы, которых нет в T.Здесь: id4.

Мой запрос:

SELECT id FROM T WHERE id IN (id1, id3, id4)

позволяет мне найти все идентификаторы L, присутствующие в T, но я не хочу наоборот: все идентификаторы L НЕ присутствует в T.

У кого-то есть идея?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

В MySQL 8.x вы можете сделать: если, например, список L имеет три значения (123, 456, 789), то вы можете сделать:

with L as (
  select 123 as id
  union select 456
  union select 789 -- add more values to the list L here
)
select id from L where id not in (select id from T)

В MySQL 5.x вы можете сделать:

select L.id
from (
  select 123 as id
  union select 456
  union select 789
) L
left join T on L.id = T.id
where T.id is null
0 голосов
/ 04 февраля 2019

Это можно сделать с условием NOT EXIST и коррелированным подзапросом.Этот запрос даст вам все идентификаторы L, НЕ присутствующие в T :

SELECT L.id
FROM L
WHERE NOT EXISTS (SELECT 1 FROM T WHERE L.id = T.id)

Если L является списком, а не таблицей, вы можете превратить его в таблицу следующим образом:

SELECT L.id
FROM (SELECT 'id1' id UNION ALL SELECT 'id3' UNION ALL SELECT 'id4') L
WHERE NOT EXISTS (SELECT 1 FROM T WHERE L.id = T.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...