SQL基于多个表进行计算

use*_*453 2 sql

我有一个简单的DB与以下两个表.

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  ||
Run Code Online (Sandbox Code Playgroud)

但是,除了从sessions表中返回信息之外,我还希望它返回一个名为的计算列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                ||
Run Code Online (Sandbox Code Playgroud)

这有意义吗?如果是这样,它甚至可能!?(你可能猜到)我是一个SQL菜鸟,这远远超出我的意义!

Mar*_*ith 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  
Run Code Online (Sandbox Code Playgroud)

  • @ vol7ron - 大声笑它不会让它更难以解释或复杂,丑陋显然是主观的,你的论点是由于对文件大小的影响而不应该使用可选的`OUTER`关键字,这是坦率可笑的.出于类似的原因,您是否为所有表和列提供了一个字符名称?无论如何,你应该对缺乏格式感到高兴.白色空间占用宝贵的字节:-) (3认同)