我有一个简单的数据库,包含以下两个表。
会话表中的id
字段之间存在一对多关系
和候选人表格中的session_id
字段。
我想要一个SELECT * FROM SESSIONS
的查询。
SESSIONS (TABLE)
|| id || title || max_candidates || description ||
|| 01 || fish || 05 || some string ||
|| 02 || birds || 10 || some string ||
CANDIDATES (TABLE)
|| session_id || user_id ||
|| 01 || user01 ||
|| 02 || user12 ||
|| 02 || user03 ||
|| 02 || user05 ||
但是,除了从会话表中返回信息外,
我还希望它返回一个名为avaliable_spaces
的计算列。
我希望此列返回特定的可用空间数
会话基于(session_id
中没有出现CANDIDATES
次) - (max_candidates
)
在上面的示例中,它将返回(显然减去列headders
);
|| id || title || max_candidates || description || avaliable_spaces ||
|| 01 || fish || 05 || some string ||04 ||
|| 02 || birds || 10 || some string ||07 ||
这有意义吗?如果是这样,它甚至可能!? (你可能猜到) 我是一个SQL菜鸟,这远不止我!
答案 0 :(得分:6)
SELECT S.id,
S.title,
S.max_candidates,
S.description,
S.max_candidates - COUNT(c.user_id) as available_spaces
FROM SESSIONS S
LEFT OUTER JOIN CANDIDATES C
ON C.session_id = s.id
GROUP BY S.id,
S.title,
S.max_candidates,
S.description
答案 1 :(得分:1)
SELECT
S.*, S.max_candidates - C.Filled AS avaliable_spaces
FROM
SESSIONS S
LEFT JOIN
(
SELECT session_id, COUNT(*) AS Filled FROM CANDIDATES GROUP BY session_id
) C ON S.ID = C.session_id