MySQL: группировка идентификатора дубликата с условием IF - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица 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 |

Поэтому, когда я ищу список оценщиков, которым разрешено оценивать theme_1, я ожидаю следующие данные:

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

Приведенная выше таблица представляет собой список всех оценщиков из tblRater и список авторизованных оценщиков для topic_1 из tblAuthorizedRater.

Я попытался выполнить левое соединение с 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 голосов
/ 07 июня 2018

Поместите 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...