如何解决MYSQL查询以下
我有联接查询,该查询未按预期返回结果。下面是表结构,使用的查询,结果和预期结果
表A:
Id Name Token
1 A abcdef
2 B think
3. C Bxjscmsdnj
表B:
id TableA_id configKey configValue
1 2 pmt ins
2 2 vat gas
3 1 vat nnnb
4 1 pmt mc
5 3 vat nhu
6 3 pmt nnu
7 2 hit bxhsjab
下面是我使用的查询:
SELECT A.Token,A.Name,CASE
WHEN B.configKey = 'pmt’ THEN B.configValue
ELSE ''
END AS ‘PMT’,CASE
WHEN B.configKey = ‘vat’ THEN B.configValue
ELSE ''
END AS ‘VAT’
FROM TABLEA A
INNER JOIN TABLEB B ON A.Id = B.TableA_id
WHERE B.configKey IN (‘PMT’,‘VAT’)
ORDER BY A.id DESC;
结果:
Token Name PMT VAT
1 A nnnb
1 A mc
2 B gas
2 B ins
预期结果:
Token Name PMT VAT
1 A mc nnnb
2 B ins gas
解决方法
您需要条件聚合。首先,添加一个group by
子句,将具有相同id
和name
的行分组在一起;然后,将case
表达式包装到聚合函数中,例如max()
:
select
a.id,a.name,max(case when b.configkey = 'pmt' then b.configvalue end) pmt,max(case when b.configkey = 'vat' then b.configvalue end) vat
from tablea a
inner join tableb b on a.id = b.tablea_id
where b.configkey in ('pmt','vat')
group by a.id,a.name
order by a.id desc;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。