MySQL запрос дублирует поле имени - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать запрос SQL, который возвращает общее количество проверок сеанса на одного посетителя. Однако, когда я запустил приведенный ниже запрос, он повторяет полное имя для всего.

Попробуйте разные типы запросов, но получите те же результаты

SELECT
CONCAT(ea.first_name, ' ', ea.last_name) as full_name,
es.name AS name,
es.event_id AS event_id,
(   SELECT COUNT(DISTINCT esc.event_attendee_id)
    FROM event_session_checkin esc
    WHERE(esc.event_session_id =es.id) 
) AS attendee_count
FROM event_session es, event_attendee ea;

Результаты:

+----------+-----------+-----------+--------------+
|full_name |event_name |event_id   |attendee_count|
+-------------------------------------------------+
|anita_roy |name_exam  |event_exam1|      2       |
|anita_roy |name_exam  |event_exam2|      3       |
|anita_roy |name_exam  |event_exam3|      5       |
|anita_roy |name_exam  |event_exam4|      6       |
|anita_roy |name_exam  |event_exam5|      7       |

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Конечно, потому что вы не указали, как были связаны таблицы!

SELECT * FROM person,address

Приведенный выше запрос просто возвращает каждого человека, объединенного с каждым адресом.Он игнорирует любые взаимосвязи между таблицами, и если будет 200 человек и 100 адресов, то получится 20000 результатов каждого человека по каждому адресу.Каждое имя будет повторяться 100 раз, по одному на каждый адрес.Каждый из адресов будет повторяться 200 раз, по одному на каждого человека.Даже если вы объявили внешние ключи и т.д. между таблицами - они не имеют значения;mysql не будет использовать их для определения связей между таблицами.В базе данных должно быть четко указано , какой столбец человека связан с каким столбцом адреса:

SELECT * FROM person p INNER JOIN address a on p.home_address_id = a.id

Таблицы можно объединять несколько раз:

SELECT * FROM  
  person p 
  INNER JOIN address ha on p.home_address_id = ha.id
  INNER JOIN address wa on p.work_address_id = wa.id

Пожалуйста, прочитайте, усвойте, поймите и перепишите ваш запрос, чтобы вы явно объявили, какой столбец в event_session относится к какому столбцу в event_attendee

0 голосов
/ 10 июля 2019

Попробуйте

SELECT CONCAT(ea.first_name, ' ', ea.last_name) as full_name,es.name AS name,
enter code here es.event_id AS event_id,
(SELECT COUNT(DISTINCT esc.event_attendee_id)
        FROM event_session_checkin esc
        WHERE(esc.event_session_id =es.id) ) AS attendee_count
FROM
event_session es, event_attendee ea group by full_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...