SQL получает строки из таблицы, если значение не существует - PullRequest
0 голосов
/ 18 декабря 2018

enter image description here

Попытка построить запрос на выборку.

Это моя таблица, назовем первый столбец id, второй столбец two.и третий столбец «три», и последний столбец «date_time»

У меня есть эта таблица.Я хочу получить все строки, равные 7 (в столбце «три»), если нет записи, равной 8 (в столбце «три»).

Например, я хочу строку с идентификатором 6, но НЕid 8 (поскольку в другую строку введено 8)

Мне удалось получить строки, но как только существует другая запись с 8, она вообще ничего не возвращает (использование не существует)

Спасибо.

Ответы [ 5 ]

0 голосов
/ 18 декабря 2018

Вы можете использовать self join, чтобы получить свой результат

select A.* from table_name A left join table_name B on A.id = B.three 
where A.three = 7 and B.three is null;

В приведенном выше запросе он получит все строки из таблицы A, где столбец 'three' имеет значение 7, затем назначит null для столбца 'три "таблицы B, где столбец" id "таблицы A не найден в столбце" три "таблицы B.

0 голосов
/ 18 декабря 2018

Вы можете использовать exists как

   select *
     from tab t1
    where t1.three = 7
      and exists ( select 1 from tab t2 where t2.id = t1.id and t1.id != 8 );

   id   two  three date_time
   ---  ---- ----- -------------------
    6    4     7   2018-12-17 16:56:41

Rextester Demo

0 голосов
/ 18 декабря 2018

Если я правильно понял ваш вопрос, я думаю, что приведенный ниже код решит вашу проблему.

SELECT 
  A.ID, A.TWO, A.THREE, A.DATE_TIME 
FROM 
  TABLE A
LEFT JOIN 
  TABLE B ON A.TWO=B.TWO AND B.THREE=8 AND A.ID<>B.ID
WHERE 
   B.ID IS NULL
   AND A.THREE=7
0 голосов
/ 18 декабря 2018

Мы можем сделать это с помощью EXISTS запроса:

SELECT id, two, three, date_time
FROM yourTable t1
WHERE three = 7 AND NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.three = t1.id);

enter image description here

Демо

Этот подход, вероятно, превзойдет анти-объединение.

0 голосов
/ 18 декабря 2018

Описание вашего требования не на 100% ясно, но я думаю, что вы хотите запросить те строки, где столбец три = 7, но за исключением тех строк, где идентификатор этой строки существует в другом месте в третьем столбце таблицы.

Это должно работать:

SELECT 
  `id`, `two`, `three`, `date_time`
FROM 
  `yourtable`
WHERE 
  `three` = 7
  AND `id` NOT IN (SELECT `three` FROM `yourtable`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...