我已经尝试了正确和内部联接,要么我最终得到额外的记录,要么根本没有记录。请在此查询中建议修复内容。
表结构 活动 - >日 - >会议 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
}
]
答案 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