如何从三张数据表中查询共有的最大salary字段值
三表共通salary最大值查询SQL方案
测试数据说明
现有a、b、c三张业务表,三张表均包含salary字段,测试数据如下:
- 表a
id salary 101 10000 102 15000 103 18000 - 表b
id salary 110 14000 127 21000 118 15000 - 表c
id salary 191 15000 192 20000 193 8000
需求目标
查询同时在三张表中存在的salary值里的最大值,预期返回结果为15000。
可直接运行的SQL语句
通用兼容写法(支持所有SQL数据库)
通过内连接取三表salary的交集,再聚合取最大值,写法兼容MySQL、Oracle、SQL Server、PostgreSQL等所有主流数据库:
SELECT MAX(a.salary) AS salary FROM a JOIN b ON a.salary = b.salary JOIN c ON a.salary = c.salary;
如果单表内存在重复的salary记录,可先对每个表的salary去重后再关联,减少关联计算量:
SELECT MAX(a.salary) AS salary FROM (SELECT DISTINCT salary FROM a) a JOIN (SELECT DISTINCT salary FROM b) b ON a.salary = b.salary JOIN (SELECT DISTINCT salary FROM c) c ON a.salary = c.salary;
执行上述语句后,会过滤掉只在1张或2张表存在的salary值:8000仅在c表、10000仅在a表、14000仅在b表、18000仅在a表、20000仅在c表、21000仅在b表,最终仅保留三表共有的15000,取最大值后结果和预期一致。
内容的提问来源于stack exchange,提问作者ROOT
相关产品推荐
相关产品推荐

