левое внешнее соединение на той же таблице с условием - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть таблица в базе данных mysql 5.7 под названием «mytable», которая сделана так:

 --------------------
| title   |   flag   |
|--------------------|
| first   |   0      |
| first   |   1      |
| second  |   0      |
 --------------------

Из этой таблицы мне нужно выбрать только строки с флагом = 0, а из них удалить все те, которые имеют одинаковый заголовок с флагом = 1. В результате получается такой результат:

 --------------------
| title   |   flag   |
|--------------------|
| second  |   0      |
 --------------------

Как мне написать мой запрос? Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

SELECT a.*
FROM mytable a
LEFT OUTER JOIN mytable b
ON a.title = b.title
AND b.flag = 1
WHERE a.flag = 0
AND b.flag IS NULL

Выполните LEFT OUTER JOIN, затем проверьте наличие NULL в одном из соединенных столбцов, чтобы убедиться, что не найдено подходящей записи.

0 голосов
/ 30 апреля 2018

Просто используйте подзапрос и объедините его с функцией IN() MySQL. Будет работать следующее:

SELECT title, 
       flag
 FROM mytable
WHERE flag = 0
  AND title NOT IN( SELECT title FROM mytable WHERE flag = 1 );

SQL Fiddle

...