如何在字段中使用特定代码查询选择名称并且同一时间在同一字段中没有代码

时间:2018-12-22 08:42:35

标签: mysql sql

我的桌子的例子

Name    Code
Jolas   sd02
Jolas   da014
Albert  cca01
Albert  da014
Julito  sd02
Julito  da014
Vergel  cca01
Vergel  da014

我要选择不带sd02的所有da014,因此我的输出应为Vergel和Albert,因为它们都没有SD02

我应该如何查询

谢谢

2 个答案:

答案 0 :(得分:1)

您可以将GROUP BYHAVING子句一起使用基于条件聚合的过滤条件:

SELECT Name
FROM your_table_name 
GROUP BY Name
HAVING 
  SUM(Code = 'da014') AND /* Has code `da014` */
  NOT SUM(Code = 'sd02') /* Does not have code sd02 */

答案 1 :(得分:0)

对于这些类型的问题,我通常更喜欢使用group by方法。但是,如果性能是一个问题,那么使用正确的索引可能会更快:

select t.name
from t
where t.code = 'da014' and
      not exists (select 1 from t t2 where t2.name = t.name and t2.code = 'sd02');

特别是,您希望在t(code, name)t(name, code)上建立索引-一个用于外部查询,一个用于子查询。

如果您确实使用group by,则在聚合之前进行过滤可以提高性能:

select t.name
from t
where t.code in ('da014', 'sd02')
group by t.name
having sum(t.code = 'sd02') = 0;

您只需要检查'sd02'。如果不存在,则name必须具有group by要处理的其他代码。