mysql:使用if条件对重复id进行分组

fd3cxomn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(348)

我有一个表tblrater(它包含了所有可以给一个主题打分的用户),其示例数据如下:

RaterID | Name  |
=================
rater_1 |Katty  |
rater_2 |Batty  |
rater_3 |Ratty  |
rater_4 |Shatty |
rater_5 |Patty  |

还有另一个表tblauthorizedrater(其中包含有关将哪个评分员分配给哪个主题评分的数据),其示例数据如下:

TopicID | RaterID |
===================
topic_1 | rater_1 |
topic_1 | rater_2 |
topic_1 | rater_3 |
topic_2 | rater_2 |
topic_2 | rater_3 |
topic_3 | rater_1 |
topic_3 | rater_2 |
topic_6 | rater_1 |

因此,当我查找允许对主题1评分的评分者列表时,我希望得到以下数据:

RaterID | Authorized|
=====================
rater_1 | 1         |
rater_2 | 1         |
rater_3 | 1         |
rater_4 | 0         |
rater_5 | 0         |

上表是tblrater所有评分员的基本列表和tblauthorizedrater主题1的授权评分员列表。
我试着用tblrater在左边,tblauthorizedrater在右边和if条件做左连接。然而,我得到的结果重复率,如果我做了一个小组,它,我没有得到预期的结果。
仅供参考,以下是我目前正在尝试的查询:

select
    tr.RaterID,
    IF(tar.TopicID = 'topic_1', 1, 0) as Authorized 
from tblRater as tr 
left join tblAuthorizedRater as tar
on tr.RaterID = tar.RaterID;

我也试着抬头看看subselect,union,但都没用。

qq24tv8q

qq24tv8q1#

topicID = 'topic_1'ON 子句,所以只能从 tblAuthorizedRater . 然后通过测试 NULL .

SELECT 
    tr.RaterID,
    tar.topicID IS NOT NULL AS Authorized
FROM tblRater AS tr
LEFT JOIN tblAuthorizedRater AS tar
ON tr.RaterID = tar.RaterID AND tar.TopicID = 'topic_1'

演示

相关问题