假设我有一张这样的 table
Id item_id type_id date
1 1 1 2016-08-11
2 2 2 2016-08-12
3 2 3 2016-08-13
4 3 4 2016-08-14
5 4 3 2016-08-15
6 2 3 2016-08-16
如您所见,我有 id 为 2 的项目,该项目有 2 种类型(type_id 2 和 3)。如何在不使用子查询的情况下获取不属于类型 3 的所有项目 (item_id)。例如预期结果应该是:
Id item_id type_id date
1 1 1 2016-08-11
4 3 4 2016-08-14
如果我写下面的SQL语句:
SELECT * FROM my_table WHERE type_id <> 3 GROUP BY item_id;
上面的语句还返回类型 2(因为表中的一行也不是类型 3)。
请提供任何帮助。
最佳答案
您可以计算 item_id 的 type_id 为 3 的次数,并且仅选择计数为 0 的那些
SELECT `Id`, `item_id`, `type_id`, `date`
FROM MyTable
GROUP BY item_id
HAVING COUNT(CASE WHEN type_id = 3 THEN 1
END) = 0
请注意,如果每个 item_id 有多个记录,则按 item_id 分组只会为您提供结果中的一条记录。
关于mysql - 获取所有非值行而不使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978757/