Mysql join делает все join - PullRequest
       10

Mysql join делает все join

0 голосов
/ 13 июня 2019

Я пытаюсь получить доступ к базе данных для двух таблиц.В магазине я храню список событий, который имеет

Table Event
id, name,datei,houri, dateF,Hourf ,capacity, age ,description,image,url, local

Table Assistance
visibility, event, client

Для доступа к списку событий с указанным идентификатором у меня есть

SELECT * from event where local = '1'

Для доступа к количеству людей, посещающих событиеУ меня есть

SELECT count (*) as assistants FROM Assistance WHERE event = '1'

Но, чтобы сложить две вещи, которые у меня есть

SELECT e. *, COUNT (a.client) AS asis FROM event e LEFT JOIN assistance to ON e.eid = a.event where e.locales = '1' GROUP BY a.evento

Здесь, в последнем случае, он берет мне события, которые он хочет, и иногда только тогда, когда у него есть помощь.

Используйте mysql, и все соединения недоступны.

Я пытался отладить разные варианты, но мне это не удалось.Если необходимо внести вклад или разъяснение, укажите меня.Цифры 1 являются примером.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вы агрегируете по столбцу в таблице second для LEFT JOIN. Это может быть NULL. Вы хотите агрегировать по первой таблице; и если вы используете один столбец, он должен быть первичным ключом или уникальным.

Итак:

SELECT e.*, COUNT(a.event) AS asis  -- if you want to count matches, use a key in the ON clause
FROM event e LEFT JOIN
     assistance a
     ON e.eid = a.event 
WHERE e.locales = 1  -- looks like a number so I assume it is and removed the single quotes
GROUP BY e.eid;
0 голосов
/ 13 июня 2019

Чтобы получить счет из связанной таблицы, мы можем сделать коррелированный подзапрос в списке выбора

SELECT e.*
     , ( SELECT COUNT(1)
           FROM assistance a
          WHERE a.event = e.eid
       ) AS asis
  FROM event e
 WHERE e.locales = '1'

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

SELECT e.*
     , IFNULL(c.cnt,0) AS asis
  FROM event e
  LEFT
  JOIN ( SELECT a.event
              , COUNT(1) AS cnt
           FROM assistance a
          GROUP
             BY a.event
       ) c
    ON c.event = e.eid
 WHERE e.locales = '1'

Спецификация (т. Е. То, что должен возвращать запрос) не ясна из вопроса, поскольку нам нужен только сломанный SQL, мы только догадываемся о спецификации.

...