繁体   English   中英

涉及多个表之间关系的SQL查询。 SQlite3

[英]SQL query involving relation between multiple tables. SQlite3

我有这三个表:

create table Nation ("nationkey" integer, 
                     "name" text, 
                     "regionkey" integer, 
                     "comment" text, 
                     "null" text,
                     foreign key (regionkey) references Region);

create table Supplier ("suppkey" integer, 
                       "name" text, 
                       "address" text, 
                       "nationkey" integer, 
                       "phone" text, 
                       "acctbal" real, 
                       "comment" text, 
                       "null" text,
                       foreign key (nationkey) references Nation);

create table Customer ("custkey" integer, 
                       "name" text, 
                       "address" text, 
                       "nationkey" integer, 
                       "phone" text, 
                       "acctbal" real, 
                       "mktsegment" text, 
                       "comment" text, 
                       "null" text, 
                       foreign key (nationkey) references Nation);

我必须编写一个sql查询,该查询返回的客户比供应商多的国家/地区的名称。 该查询必须在Sqlite3中。 我真的是sql新手,不知道如何去做。

对于特定的国家/地区密钥,您可以获得COUNT个相应客户的数量:

SELECT COUNT(*)
FROM Customer
WHERE nationkey = ?

同样适用于供应商。

然后,您可以将这COUNT个查询用作相关子查询,以比较每个Nation记录的这些值:

SELECT name
FROM Nation
WHERE (SELECT COUNT(*)
       FROM Customer
       WHERE nationkey = Nation.nationkey) >
      (SELECT COUNT(*)
       FROM Supplier
       WHERE nationkey = Nation.nationkey)

使用显式JOIN的另一种可能的解决方案:

SELECT n.name
FROM Nation n
JOIN Customer c ON n.nationkey = c.nationkey
JOIN Supplier s ON n.nationkey = s.nationkey
GROUP BY n.name
HAVING COUNT(c.nationkey) > COUNT(s.nationkey)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM