Во-первых, я новичок в MySQL и все еще учусь. Я пытаюсь присоединиться к 2 таблицам, чтобы отобразить количество. В основном я использую 2 кода. Один код для отображения имен -
SELECT tag_logs.timestamp, People.Name FROM `tag_logs` INNER JOIN People WHERE tag_logs.tag_no = People.nametag
Другой код для отображения количества имен -
SELECT tag_logs.tag_no, COUNT(tag_logs.tag_no) FROM tag_logs GROUP BY tag_no HAVING COUNT(tag_no) >= 1
Я хочу отображать имя и номер счетчика вместо номера тега и счетчика. Я попытался присоединиться к обеим таблицам, используя следующий код, однако мне не повезло:
SELECT People.Name FROM `tag_logs` INNER JOIN People WHERE tag_logs.tag_no = People.nametag AND COUNT(tag_logs.tag_no) FROM tag_logs GROUP BY tag_no HAVING COUNT(tag_no) >= 1
Мне выдается ошибка, когда я пытаюсь вызвать FROM tag_logs во второй раз. Есть ли способ обойти это?






Так должно быть
SELECT People.Name FROM `tag_logs`
INNER JOIN People on tag_logs.tag_no = People.nametag
GROUP BY tag_no HAVING COUNT(tag_no) >= 1
РЕДАКТИРОВАТЬ
SELECT People.Name, COUNT(tag_no) FROM `tag_logs`
INNER JOIN People on tag_logs.tag_no = People.nametag
GROUP BY tag_no HAVING COUNT(tag_no) >= 1
@OloOlo добавил счет
Две таблицы соединены с помощью предложения ON. Вы должны изучить соединения.
SELECT People.Name ,COUNT(tag_logs.tag_no)
FROM `tag_logs`
INNER JOIN People ON tag_logs.tag_no = People.nametag
GROUP BY tag_logs.tag_no
HAVING COUNT(tag_no) >= 1
@Олооло. . . Этот запрос содержит более одной проблемы и не является иллюстрацией того, как правильно написать ответ на этот вопрос.
Я считаю, что запрос, который вы хотите, выглядит следующим образом:
SELECT p.Name, COUNT(*)
FROM tag_logs tl INNER JOIN
People p
ON tl.tag_no = p.nametag
GROUP BY p.Name;
Примечания:
COUNT(*) короче, чем COUNT(tl.tag_no), и они делают то же самое.GROUP BY теперь соответствует SELECT. Если у вас могут быть люди с одинаковыми именами, добавьте p.nametag к GROUP BY. Версия, использующая только GROUP BY tl.tag_no, является недопустимым SQL и должна дать сбой в большинстве баз данных из-за несоответствия p.Name в SELECT.HAVING (HAVING COUNT(tag_no) >= 1) не нужно, потому что INNER JOIN требует хотя бы одного совпадения, а tag_no никогда не является NULL (поскольку оно используется для JOIN).
условие соединения неверно