Слияние двух запросов - PullRequest
0 голосов
/ 17 мая 2018

Я представлю свою проблему на простом примере.

У меня есть два общих запроса к одной и той же таблице, скажем, таблица 'customer'

enter image description here

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

WITH preferences 
AS
(
    SELECT CustomerID,
    CustomerName,
    City,
    Country,
    PlushType,
    PlushPrice

    FROM customers cs
    LEFT JOIN plushes ps
    ON cs.CustomerID = ps.CustomerID

    WHERE cs.CustomerID < 4

)

SELECT CustomerID, PlushType, PlushPrice
FROM preferences

ВТочно так же, определив «блюда» для таблицы, содержащей всемирно известные блюда, второй запрос извлекает для другого подмножества покупателей, скажем второе подмножество, их предпочтительного блюда.

    WITH foodPreferences 
AS
(
    SELECT CustomerID,
    CustomerName,
    City,
    Country,
    FoodName,
    FoodPrice

    FROM customers cs
    LEFT JOIN foods fs
    ON cs.CustomerID = fs.CustomerID

    WHERE fs.FoodName = 'pizza'  

)

SELECT CustomerID, FoodName
FROM foodPreferences -- it returns customer 6 

Что яЯ ищу, это запрос, который показывает customerID, plushType, plushPrice для клиентов первого ИЛИ второго подмножества, то есть:

enter image description here

Это означаетЯ хотел бы применить первый запрос к первому ИЛИ второму (производному от другого запроса) подмножеству.Другими словами, я хочу выполнить первый запрос для тех клиентов, которые любят пиццу.

Я использую OracleDB с языком PL / Sql.

Есть идеи?

Ps Я знаю, что для письменного примера структура используемых запросов выглядит странно.Действительно, я работаю с чем-то более сложным и предпочел отразить структуру запроса, который у меня есть

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Добавлен новый, более эффективный ответ:

with selected_customers (customerid) as (
  select customerid 
    from customers 
    where customerid < 4
  union
  select customerid
    from customers 
    left join foods fs on cs.customerid = fs.customerid 
    where fs.foodname = 'pizza'
)
select customerid, ps.plushtype, ps.plushprice
  from selected_customers cs
  left join plushes ps on cs.customerid = ps.customerid;
0 голосов
/ 17 мая 2018

Этот запрос будет делать:

select customerid, plushtype, plushprice
  from customers cs
  left join plushes ps on cs.customerid = ps.customerid
  where customerid in (
          select customerid 
            from customers 
            where customerid < 4
        )
     or customerid in (
          select customerid 
            from customers cs
            left join foods fs on cs.customerid = fs.customerid 
            where fs.foodname = 'pizza'
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...