我的查询中存在问题
我想要的俱乐部名称是“默认俱乐部”,不会显示。但是当我尝试使用不相等时,它不起作用。 “默认俱乐部”仍在那里。
而且学生人数也错了。但是当我删除club.c_name <> 'Default Club'
时,学生人数是正确的。
以下是我的查询
SELECT DISTINCT club.c_name, c_description, count(s_id) as 'Number of Students'
FROM club
left join student on club.c_name=student.c_name and club.c_name <> 'Default Club'
group by c_name;
答案 0 :(得分:2)
“但当我删除”club.c_name&lt;&gt; '默认俱乐部'“,学生人数是正确的。”
那是因为你遗漏了WHERE
条款。
这是您的查询应该读作的内容:
on club.c_name=student.c_name WHERE club.c_name <> 'Default Club'
根据手册:
“与ON一起使用的conditional_expr是可以在WHERE子句中使用的表单的任何条件表达式。通常,您应该将ON子句用于指定如何连接表的条件,并将WHERE子句用于限制在结果集中需要哪些行。“
和
“如果LEFT JOIN中ON或USING部分的右表没有匹配的行,则右表使用所有列设置为NULL的行。您可以使用此事实查找表中没有对应表的行:“
手册中的示例:
SELECT left_tbl.*
FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
WHERE right_tbl.id IS NULL;
答案 1 :(得分:0)
这是您的原始查询,具有适当的间距:
SELECT
DISTINCT club.c_name,
c_description,
count(s_id) as 'Number of Students'
FROM
club
LEFT JOIN student ON
club.c_name=student.c_name AND
club.c_name <> 'Default Club'
GROUP BY
c_name;
从上面可以看出,您的加入条件为club.c_name = student.c_name
,并且club.c_name <> 'Default Club'
。
您要查找的是仅使用club.c_name = student.c_name
的JOIN条件。获得JOIN结果后,您可以过滤掉&#39;默认俱乐部&#39;使用WHERE子句。
SELECT
DISTINCT club.c_name,
c_description,
count(s_id) as 'Number of Students'
FROM
club
LEFT JOIN student ON
club.c_name=student.c_name
WHERE
club.c_name <> 'Default Club'
GROUP BY
c_name;