Mysql 选择在同一列中具有标志x1但不具有标志x2的所有ID

Mysql 选择在同一列中具有标志x1但不具有标志x2的所有ID,mysql,Mysql,从具有两列ID和Flag的表中 ID Flag 111 2 222 2 333 2 444 2 333 5 111 5 我想选择所有有2个标志但没有5个标志的id 预期答案 222 444 我在下面试过了,但没用 SELECT * from table where flag in ('2') and flag not in ('5') 当简单的SQL语句可以完成任务时,为什么要生成复杂的SQL?您没有提到属性标志的数据类型。假定它不是一个数字,因此请尝试从表中选择*,其中fl

从具有两列ID和Flag的表中

ID  Flag
111  2
222  2
333  2
444  2
333  5
111  5
我想选择所有有2个标志但没有5个标志的id

预期答案

222
444
我在下面试过了,但没用

SELECT * from table
where flag in ('2')
and flag not in ('5')

当简单的SQL语句可以完成任务时,为什么要生成复杂的SQL?您没有提到属性
标志
的数据类型。假定它不是一个数字,因此请尝试从表中选择*,其中flag='2'。如果
标志
为数字数据类型,则跳过
='2'
@Raky中的
'
,该标志将返回111和333,我不想将其包含在输出中。否,它将列出标志为2的所有id和标志。因此,结果将是11122233444。最后两条记录将在结果中忽略。试试看。你的目标不明确?您要求列出属性标志值为2的所有记录,但不希望列出标志值为2的某些属性id。我在下面尝试了,但这不起作用。当然其中的两个条件都在同一行中选中。和上未受影响的其他行。
SELECT id
FROM source
GROUP BY id
HAVING SUM(flag=2)
   AND !SUM(flag=5)