Mysql - объединение двух запросов с подзапросами "где в"

Мне нужно найти артикулы (идентификаторы), которых нет в нашем каталоге. Запросы просты

SELECT sku 
  FROM stock 
 WHERE sku NOT IN (SELECT sku FROM catalog) 

но могут быть и отсутствующие артикулы в таблице распродажи

SELECT DISTINCT sku 
  FROM sale 
 WHERE sku NOT IN (SELECT sku FROM catalog) 

Я хотел бы получить единый результат от mysql, будут ли все недостающие SKUS. Соединить эти два запроса с Union здесь не получится. Спасибо, всего хорошего

Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать UNION

SELECT sku 
FROM stock 
WHERE sku NOT IN (SELECT sku FROM catalog) 

union 

SELECT sku 
FROM sale 
WHERE sku NOT IN (SELECT sku FROM catalog) 

для получения distink SKU из обоих запросов

или

select  sku  
from  (
  SELECT sku FROM stock 
  union   
  SELECT  sku  FROM sale 
) t
where sku NOT IN (SELECT sku FROM catalog) 

в любом случае первый должен быть более производительным

просто убедитесь, что мы гарантировали, что sku, возвращенное из catalog, не будет NULL; условие NOT IN никогда не будет выполнено, если подзапрос возвращает значение NULL

spencer7593 19.06.2019 22:02

@ spencer7593 спасибо за подсказку. к счастью sku не может быть нулевым в моем случае

ABSimon 24.06.2019 15:19

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