SQL:是否可以为联接表分配名称

时间:2019-03-29 21:16:12

标签: mysql sql count

我有以下两个表:

商店:

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时,是否可以为结果表分配名称。

2 个答案:

答案 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