Присоединяйтесь к таблицам MySQL для отображения количества - PullRequest
0 голосов
/ 20 апреля 2019

Во-первых, я новичок в 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 во второй раз. Есть ли способ обойти это?

Я стремлюсь сделать это моим окончательным результатом, за исключением того, что я должен видеть имена вместо цифр.

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Две таблицы объединяются с помощью предложения 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
0 голосов
/ 20 апреля 2019

Я считаю, что запрос, который вы хотите, выглядит следующим образом:

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).
  • Я ввел псевдонимы таблиц, поэтому запрос легче писатьи читать.
0 голосов
/ 20 апреля 2019

Это должно быть

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...