mysql - 获取所有非值行而不使用子查询

标签 mysql sql

假设我有一张这样的 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

SQL FIDDLE EXAMPLE

请注意,如果每个 item_id 有多个记录,则按 item_id 分组只会为您提供结果中的一条记录。

关于mysql - 获取所有非值行而不使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978757/

相关文章:

sql - 关于从mysql中的表中删除数据库数据

sql - Cognos Report Studio 版本 10.2.1 中格式化日期提示出现问题

php从数据库计算前百分之十?

mysql - 使用 group_concat 的查询只返回一行

mysql - MySql 中的正则表达式

SQL获取电话号码序列

mysql - 展平表以准备 Json

mysql - 从 JSON 多维数组到 SQL

mysql - 如何将表名传递给函数?

mysql - SQL 案例 - 如果一个值等于某事然后做某事