2010-04-02 3 views
0

. Мне очень помогли присоединиться к таблице и попытаться перейти на следующий уровень. Ниже приведен SQL из справки, но с добавлением строки выбора, начинающейся с COUNT, внутреннего соединения с таблицей получателей и группы By.SQL Outer Присоединиться к группе Inner. Заполненные результаты.

SELECT 
    Event.EventID    AS EventID, 
    Event.EventDate   AS EventDateUTC, 
    Participant2.ParticipantID AS AwayID, 
    Participant1.ParticipantID AS HostID, 
    COUNT(Recipient.ChallengeID) AS AllChallenges 
FROM Event 
    INNER JOIN Matchup Matchup1 
    ON (Event.EventID = Matchup1.EventID) 
    INNER JOIN Matchup Matchup2 
    ON (Event.EventID = Matchup2.EventID) 
    INNER JOIN Participant Participant1 
    ON (Matchup1.Host = 1 
     AND Matchup1.ParticipantID = Participant1.ParticipantID) 
    INNER JOIN Participant Participant2 
    ON (Matchup2.Host != 1 
     AND Matchup2.ParticipantID = Participant2.ParticipantID) 
    INNER JOIN Recipient 
    ON (Event.EventID = Recipient.EventID) 
WHERE Event.CategoryID = 1 
    AND Event.Resolved = 0 
    AND Event.Type = 1 
GROUP BY Recipient.ChallengeID 
ORDER BY EventDateUTC ASC 

Моя цель - подсчитать, сколько строк в таблице получателей соответствует EventID в событии. Этот код отлично работает , за исключением, что также я хочу получить результаты, в которых есть 0 соответствующих строк в Recipient. Я хочу 15 строк (= количество событий), но я получаю 2 строки, один со счетом 1 и один со счетом 2 (что подходит для внутреннего соединения, так как в таблице получателей есть три строки, одна для одного EventID и два для другого EventID).

Я думал, что либо LEFT join, либо соединение OUTER было тем, что я искал, но я знаю, что я не совсем понимаю, как эти таблицы фактически соединяются. LEFT join дает мне еще одну строку с 0, которая является EventID 1 (первая вещь в таблице), но это все. Ошибки сообщают мне, что я не могу просто изменить, что INNER присоединяется к OUTER. Я попробовал скобки и некоторые подзапросы и такие, но не могу заставить их работать.

ответ

1

Использование:

SELECT e.eventid, 
      e.eventdate AS EventDateUTC, 
      p2.participantid AS AwayID, 
      p1.participantid AS HostID, 
      COUNT(r.challengeid) AS AllChallenges 
    FROM EVENT e 
    JOIN Matchup m1 ON m1.eventid = e.eventid 
        AND m1.host = 1 
    JOIN Matchup m2 ON m2.eventid = e.eventid 
        AND m2.host != 1 
    JOIN Participant p1 ON p1.participantid = m1.participantid 
    JOIN Participant p2 ON p2.participantid = m2.participantid 
LEFT JOIN RECIPIENT r ON r.eventid = e.eventid 
    WHERE e.categoryid = 1 
     AND e.resolved = 0 
     AND e.type = 1 
GROUP BY e.eventid, e.eventdate, p2.participantid, p1.participantid 
ORDER BY e.eventdate 
+0

Ах! Таким образом, группируя другие поля, в случаях, когда может быть не совпадение, строки все равно вытягиваются, не так ли? Удивительно, спасибо! –

Смежные вопросы