连接表sql没有失效

时间:2016-12-16 21:15:13

标签: sql sqlite join

我有两张这样的表:

create table classe (
id integer primary key,
name varchar not null
);

create table alunno (
id integer primary key,
id_classe integer not null
);

我会接受以下数据的唯一查询:

  • classe.id
  • classe.name
  • 具有特定id_classe的alunno的数量

所以我可以这样做:

select a.id, a.name, count(b.id) 
from classe a, alunno b 
where a.id = :1 and b.id_classe = a.id;

但是如果count = 0我在resultset中有null值。所以我总是会得到节记录的信息,如果没有一个alunno记录存在于该节,我会计算= 0,这不会使整个输出无效..我怎么能得到这个结果集?

我也尝试使用左连接但可能是错误的结构..

我补充说我正在使用SQLite,因此无法在其上使用某些SQL命令

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您需要将加入条件放在ON的{​​{1}}子句中。

LEFT JOIN

答案 1 :(得分:0)

int main() { char ch1, ch2; do { cin.get(ch1); cout.put(ch1); cin.get(ch2); cout.put(ch2); } while ((ch1 != '\n') || (ch2 != '\n')); } 仅计算非NULL count(x)值,但x计算所有行:

count(*)

(您仍需要一个外部联接来获取没有匹配的SELECT a.id, a.name, count(*) FROM classe AS a LEFT JOIN alunno AS b ON b.id_classe = a.id WHERE a.id = :1 GROUP BY a.id; 行。只有在您搜索多个ID时才需要进行分组。)

或者,使用correlated subquery查找计数:

classe