我有以下两个表:
商店:
Name | Country
Pharmacy Japan
Green Vine Italy
Red Palace Morocco
La Pizza Italy
Nature Shop Japan
Medical 100 Japan
信息:
Name | Category | Price
Pharmacy Health Cheap
Green Vine Dining Medium
Red Palace Dining Expensive
La Pizza Dining Cheap
Nature Shop Health Medium
Medical 100 Health Expensive
Info中的属性“名称”是外键,它引用Shop中的属性“名称”(主键)。 我想编写一个查询,输出所有属于同一国家/地区类别的所有名称(例如,“健康”类别中的所有商店都在日本)。例如。输出为:
Name | Country | Category
Pharmacy Japan Health
Nature Shop Japan Health
Medical 100 Japan Health
我有以下代码将两个表连接起来:
select Shop.Name, Country, Category from Shop, Info where
(Shop.Name=Info.Name);
我不确定如何组成查询的其余部分,因为我必须连接两个表,因此生成的表没有名称。在属性名称上加入表Shop和Info时,是否可以为结果表分配名称。
答案 0 :(得分:0)
在编写查询时,总是使用正确的,明确的,标准语法JOIN
。我还建议使用表别名。
您的查询就像添加两个WHERE
条件一样容易,所以:
select s.Name, s.Country, i.Category
from Shop s join
Info i
on s.name = i.name
where s.Country = 'Japan' and i.Category = 'Health';
当然,您不需要返回国家和类别。 。 。因为你知道这些是什么。如果是这种情况,那么exists
可能更合适:
select s.Name
from Shop s
where s.Country = 'Japan' and
exists (select 1
from Info i
where i.name = s.name and
i.Category = 'Health'
);
答案 1 :(得分:0)
您要做的是将联接结果用于新的cte
with HealthStoresInJapan as (
select s.*, i.Category
from Info i
join Shop s on i.Name = s.Name
where s.Country = 'Japan' and i.Category = 'Health'
)
select * from HealthStoresInJapan