Просмотр и установка операторов MySQL - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над академическим проектом, который просит использовать операторы множеств (или присоединиться / подзапрос).Задача: Показать идентификатор и имя клиента для всех клиентов, у которых есть хотя бы один заказ в апреле и хотя бы один заказ в мае, но нет заказов в июне.

CREATE VIEW oeOrdersPriorYear AS
SELECT cust_customers.customer_id, cust_customers.customer_name_last, cust_customers.customer_name_first, extract( month from oe_orderHeaders.order_date) as order_month
FROM cust_customers
JOIN oe_orderHeaders
ON cust_customers.customer_id = oe_orderHeaders.customer_id
ORDER BY order_month;

Моя попыткав коде:

SELECT customer_id, customer_name_first, customer_name_last
FROM oeOrdersPriorYear
WHERE order_month = '5'

MINUS
SELECT customer_id, customer_name_first, customer_name_last
FROM oeOrdersPriorYear
WHERE order_month = '6';

Это действительно?Я бегу в MySQL, поэтому я не уверен, что синтаксис правильный.Как еще можно написать это с помощью подзапроса / соединения?

ссылка на диаграмму

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

MySQL не распознает MINUS и INTERSECT.Вы можете использовать NOT IN или NOT EXISTS, которые работают как MINUS в MySQL.

select customer_id, customer_name_first, customer_name_last
from oeOrdersPriorYear
where order_month IN ('4','5') and
customer_id, customer_name_first, customer_name_last
NOT IN (select customer_id, customer_name_first, customer_name_last
from oeOrdersPriorYear
where order_month = '6');
0 голосов
/ 30 ноября 2018

Одним из способов является использование фильтрации на основе условного агрегирования в предложении HAVING:

SELECT customer_id, customer_name_first, customer_name_last
FROM oeOrdersPriorYear 
WHERE order_month IN ('4','5','6')   -- consider only from April, May and June
GROUP BY customer_id, customer_name_first, customer_name_last 
HAVING SUM(order_month = '4') AND   -- atleast one in April
       SUM(order_month = '5') AND   -- atleast one in May 
       NOT SUM(order_month = '6')   -- no order in June
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...