我有以下模式
客户(CID整数不为NULL,名称VARCHAR(30),地址VARCHAR(50))
产品(PID整数不为空,名称为VARCHAR(50),价格为十进制(10,2))
出售(SID BIGINT NOT NULL,STATUS VARCHAR(10),CID INTEGER,TOTALPRICE DECIMAL(30,2))
PRODUCTSALE(SID BIGINT不为空,PID INTEGER不为空,UNITED INTEGER,小计小数(30,2))
我目前有一个这样的声明:
32
我认为它正在创建四个表(P,S,PS,C)的交叉产品?我可以通过对其中四个使用自然连接来对其进行优化吗?优化此语句的另一种方法是什么?
答案 0 :(得分:0)
从最大的表格开始,然后进行过滤。
SELECT p.NAME, COUNT(DISTINCT c.CID) AS NUM_CUSTOMERS
FROM ProductSale ps
INNER JOIN Product p ON ps.PID=p.PID
INNER JOIN Sale s ON ps.SID=s.SID
INNER JOIN Customer c ON s.CID=c.CID
GROUP BY p.Name
ORDER BY NUM_CUSTOMERS DESC