Объединить результат внутреннего объединения в один столбец - PullRequest
1 голос
/ 03 апреля 2019

У меня есть один магазинный стол и один предметный стол.В магазине есть много предметов, и моя проблема в том, что я хочу найти несколько предметов, которые доступны в одном магазине.

shop table
id | name
---------
1  | Shop 1
2  | Shop 2

Item table
id | name    | shop_id
----------------------
1  | JRC     | 1
2  | sukhoy  | 1
3  | sukhoy  | 2


Когда я хочу найти элемент jrc и sukhoy, значит, он должен показывать Магазин 1, потому что оба магазина готовы в Магазине 1.

Мой ожидаемый результат -

Output table
id | shopName | itemName
------------------------
1  | Shop 1   | JRC
2  | Shop 1   | sukhoy

Мой запрос

select * from shops
inner join products as produk2 on produk2.shopId = shops.id and (produk2.name like "%sukhoy%")
inner join products as produk on produk.shopId = shops.id and (produk.name like "%jrc%")

Он работает, потому что он использует разные псевдонимы для внутреннего соединения.Но то, что я хочу, это как объединить выходные данные этого соединения 2 без определения другого псевдонима.Или как я могу объединить результат объединения в один и тот же столбец?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я думаю, что это то, что вы хотите:

select p.shop_id
from products p
group by p.shop_id
having sum(p.name like '%jrc%') > 0 and
       sum(p.name like '%sukhoy%') > 0;

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

0 голосов
/ 03 апреля 2019

Вы можете использовать только одно соединение:

select * from shops
inner join products as produk 
on produk.shopId = shops.id 
and (produk.name like "%jrc%" OR produk.name like "%sukhoy%")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...