将内部联接结果合并到一列

时间:2019-04-03 13:31:33

标签: mysql sql join

我有一张商店桌子和一张物品桌子。商店表中有很多商品,我的问题是我想搜索一个商店中可用的多个商品。

select 
regexp_substr('123:20:20' ,'(.*?)(:|$)', 1, 1, NULL, 1 ) HOUR,
regexp_substr('123:20:20' ,'(.*?)(:|$)', 1, 2, NULL, 1 ) MIN,
regexp_substr('123:20:20' ,'(.*?)(:|$)', 1, 3, NULL, 1 ) SECOND
from dual;

当我要查找项目jrc和sukhoy时,它必须显示Shop 1,因为这两个项目都已在Shop 1上准备就绪。

我的预期输出是

:root {
  --devHeight: 86vh; //*This value changes
}

.div{
    height: calc(var(--devHeight)*0.10); //change multiplier to suit required height
}

我的查询是

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


之所以起作用,是因为每个内部联接使用不同的别名。 但是我想要的是,如何在不定义其他别名的情况下合并这2个连接的输出。或者如何将联接结果合并到同一列中?

2 个答案:

答案 0 :(得分:0)

您可以只使用一个联接:

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

答案 1 :(得分:0)

我认为这可以满足您的要求

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;

这将返回同时具有这两种产品的商店ID。当然,您可以将结果加入shops,以获得有关商店的更多信息。