SQL查询返回额外记录

时间:2015-05-21 08:08:54

标签: sql

我已经尝试了正确和内部联接,要么我最终得到额外的记录,要么根本没有记录。请在此查询中建议修复内容。

表结构 活动 - >日 - >会议 session_attendee

SELECT session.id,
(SELECT count(*) from event e INNER JOIN day AS d ON e.id = d.event_id INNER JOIN session AS s ON d.id = s.day_id WHERE e.id = event.id AND d.id = day.id) AS total,
day.date, session.name, session.start, session.end, session.room,
(SELECT COUNT(distinct attendee_id) FROM session s LEFT JOIN session_attendee AS sa ON s.id = sa.session_id WHERE s.id = session.id) AS attendees
FROM event
LEFT JOIN day ON event.id = day.event_id
LEFT JOIN session ON day.id = session.day_id
LEFT JOIN session_attendee ON session.id = session_attendee.session_id
WHERE event.id = 12
GROUP BY session.id
ORDER BY day.date, session.start, event.name;

结果集

[
{
"id": 9,
"total": 1,
"date": "2015-05-12T04:00:00.000Z",
"name": "test",
"start": "00:55:00",
"end": "00:55:00",
"room": "abc",
"attendees": 0
},
{
"id": null,
"total": 0,
"date": "2015-05-13T04:00:00.000Z",
"name": null,
"start": null,
"end": null,
"room": null,
"attendees": 0
}
]

1 个答案:

答案 0 :(得分:0)

只要在postgresql上试试,你的SQL查询就会失败,因为它错了。 您正在尝试选择没有聚合函数的字段,为什么没有GROUP BY

但是它是一个不正确的查询的主要原因是你必须将它改为这样的东西:

WHERE session.id in (
SELECT 
    session.id
    FROM
    event
        LEFT JOIN
    day ON event.id = day.event_id
        LEFT JOIN
    session ON day.id = session.day_id
    WHERE
    event.id = 12