我有两张这样的表:
create table classe (
id integer primary key,
name varchar not null
);
create table alunno (
id integer primary key,
id_classe integer not null
);
我会接受以下数据的唯一查询:
所以我可以这样做:
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命令
非常感谢你的帮助。
答案 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