MySQL:使用IF条件对重复ID进行分组

时间:2018-06-06 23:50:31

标签: mysql database select join rdbms

我有一个表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 |

因此,当我查找允许对topic_1进行评分的评分列表时,我希望得到以下数据:

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

上表基本上是来自tblRater的所有评估者的列表,以及来自tblAuthorizedRater的topic_1的授权评估者列表。

我尝试左边的tblRater和右边的tblAuthorizedRater以及if条件进行左连接。然而,我得到的结果重复RaterID,如果我做了一个组,我没有得到预期的结果。

仅供参考,这是我到目前为止所尝试的查询:

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,但没有一个帮助。

1 个答案:

答案 0 :(得分:2)

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'

DEMO