SQL-запрос НЕ ВХОДИТ из 3 таблиц с условиями

У меня есть структура таблиц:

old_data

| электронная почта | тип |

/////////////////////////////////

клиенты

| электронная почта1 |

///////////////////////////////

мусор

| электронная почта |


Мне нужно найти записи, которых нет в таблице clients, но которые все еще существуют в таблице old_data, где они имеют тип = «Учетные записи». Поэтому я написал этот код:

SELECT `email` FROM `old_data`
WHERE `type` = 'Accounts' AND `email` NOT IN (SELECT `email1` FROM `clients`))

Затем мне нужно найти в этом результате записи, которых нет в таблице trashes. Поэтому я написал этот код:

SELECT * FROM (SELECT `email` FROM `old_data` 
WHERE `type` = 'Accounts' AND `email` NOT IN (SELECT `email1` FROM `clients`)) AS t1 
WHERE t1.email NOT IN (SELECT `email` FROM `trashes`)

Проблема здесь в том, что у меня есть несколько записей в таблице old_data для 1 электронной почты и типа «Учетные записи». То же самое есть в таблице trashes, но не в таблице clients. Мне нужно написать запрос типа:

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

Пожалуйста, помогите, я потерялся...

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать not in, связав условия.

SELECT od.`email`
FROM `old_data` od
WHERE od.`type` = 'Accounts' AND
      od.`email` NOT IN (SELECT `email1` FROM `clients`) AND
      od.email NOT IN (SELECT `email` FROM `trashes`);

Я предпочитаю not exists с подзапросом, потому что он лучше обрабатывает значения NULL.

Я не могу отметить ваш ответ как полезный.... Но он имеет для меня ценность, так что большое спасибо. :)

Andrej V. 31.01.2019 18:01
Ответ принят как подходящий

Мне удалось обработать его с другим параметром.

SELECT * FROM (SELECT `email`, `secretId` FROM `old_data`
WHERE `type` = 'Accounts' AND `email` NOT IN (SELECT `email1` FROM `clients`)) AS t1 
WHERE t1.secretId NOT IN (SELECT `secretId` FROM `trashes` WHERE `type` = 'Accounts')

Также работает с

SELECT od.`email`, od.`secretId`
FROM `old_data` od
WHERE od.`type` = 'Accounts' AND
      od.`email` NOT IN (SELECT `email1` FROM `clients`) AND
      od.`secretId` NOT IN (SELECT `secretId` FROM `trashes` WHERE `type` = 'Accounts');

Спасибо за помощь. :)

Другие вопросы по теме