MySQL关联PAR和AT表查询AT最大最小C值时缺失字段问题求解
问题排查
- 你的查询语句仅从PAR表取数,C字段存储在AT表中,未关联AT表自然无法获取C字段值,导致输出缺少C列
- 部分数据库中
||是字符串拼接运算符,并非逻辑或运算符,判断C为最大值或最小值请使用OR关键字,避免逻辑判断失效
正确查询语句
使用两表关联的方式即可同时拿到PAR表的T、U字段和AT表的C字段,拼接后符合要求的输出格式:
SELECT CONCAT(p.T, ' ', p.U, ' ', a.C) AS output FROM PAR p INNER JOIN AT a ON p.A = a.A WHERE a.C = (SELECT MIN(C) FROM AT) OR a.C = (SELECT MAX(C) FROM AT);
如果需要兼容存在多条相同最大/最小C值的场景,可以使用窗口函数实现:
SELECT CONCAT(p.T, ' ', p.U, ' ', a.C) AS output FROM PAR p INNER JOIN ( SELECT A, C, RANK() OVER(ORDER BY C ASC) AS rk_min, RANK() OVER(ORDER BY C DESC) AS rk_max FROM AT ) a ON p.A = a.A WHERE a.rk_min = 1 OR a.rk_max = 1;
内容的提问来源于stack exchange,提问作者Morello
相关产品推荐
相关产品推荐

