网上找的大多数有关嵌套查询的都是关于 IN 的使用,比如
SELECT * FROM tab1 WHERE key IN (SELECT key2 FROM tab2)
通常来说这样的嵌套只能处理比较简单的情况,在相对复杂的情况就涉及将一个SELECT的结果LEFT JOIN到查询之中,比如:
SELECT 表1.Shop AS 门店,
表1.Code AS 号码,
表1.Stock AS 股票,
表2.Name AS 名称,
临时表.Profit AS 利润,
IFNULL(临时表.Num,0) AS 销量
FROM 表1
LEFT JOIN 表2 on 表1.Code=表2.Code
LEFT JOIN (
select Code,SUM(Num) as Num, SUM(Profit) AS Profit
from 表3
group by Code) as 临时表 on 临时表.Code=表1.Code
where 表1.Date='2020-02-02'
- 本例中
临时表
就是一个被LEFT JOIN的子查询,LEFT JOIN 后面别忘了跟上表别名,我在这里使用了嵌套的查询,并赋予别名,然后可以直接在select后面使用临时表.Profit
- SUM(Num) 使用函数后该字段的名字就是SUM(Num) 而不是Num,所以可以加一个as使用别名改回正常的名字
- IFNULL(expr, val) 表示判断表达式是否为空,若为空用val替代,用以解决left join 产生的空值