不等于SQL WONT WORK

时间:2016-02-24 16:21:37

标签: mysql

我的查询中存在问题

我想要的俱乐部名称是“默认俱乐部”,不会显示。但是当我尝试使用不相等时,它不起作用。 “默认俱乐部”仍在那里。

而且学生人数也错了。但是当我删除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;

2 个答案:

答案 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;