通过外键关联多表查询实现单条返回用户投票颜色的SQL问题
问题原因
你现有SQL返回3条记录的核心原因是,使用OR条件关联Colors表时,每一个vote字段匹配到颜色都会生成一条独立的行数据,1条投票记录自然会返回3条结果。
解决方案
将Colors表分别关联三次,每次对应一个投票字段,就能把三次投票的颜色放到同一条记录的不同列中,修改后的SQL如下:
SELECT v.id AS 投票ID, u.name AS 用户名, c1.name AS 第一次投票颜色, c2.name AS 第二次投票颜色, c3.name AS 第三次投票颜色 FROM votes v INNER JOIN users u ON v.user = u.id LEFT JOIN colors c1 ON v.vote_01 = c1.id LEFT JOIN colors c2 ON v.vote_02 = c2.id LEFT JOIN colors c3 ON v.vote_03 = c3.id
说明
- 这里给Colors表设置了三个不同的别名
c1/c2/c3,分别和vote_01/vote_02/vote_03做一对一关联,不会生成多余的行 - 用
LEFT JOIN是为了避免某一个投票字段为空时,整条记录被过滤,如果你能保证三个投票字段都有有效值,换成INNER JOIN也可以
内容的提问来源于stack exchange,提问作者Gabreil
相关产品推荐
相关产品推荐

