我是SQL新手.我有一个MySQL表,其中的行如下

a b c d e f
abra ca da bra sa 7
abra fa ll of mo 8
ac st da bra sa 10
ac ca da bra mo 9
pa ni rar pat sa 11
pa pu bra sa mo 11

e中的值是samo.对于列a的每个值,总是有两行,一行是sa,另一行是mo(加上其他几行).

我想要获取列a值相同但第sa行和mo行在其列f中具有不同值的所有行.因此,对于上面的示例,查询将过滤掉最后两行,因为它们在列f中都有值11,并且将返回

a b c d e f
abra ca da bra sa 7
abra fa ll of mo 8
ac st da bra sa 10
ac ca da bra mo 9

我try 了这个查询,但没有返回正确的数据

select * from table t1 where exists 
(select 1 from table t2 where t1.a <> '' 
and t2.a <> '' and t1.a=t2.a and (t2.e='sa' or t2.e='mo') and t1.e=t2.e and t1.f<>t2.f)  order by a

推荐答案

首先确定哪些a的值有2个f的值,然后只包括那些值为a的行,怎么样?

SELECT *
FROM t1
WHERE e IN ('sa', 'mo')
AND a IN (
  SELECT a
  FROM t1
  WHERE e IN ('sa', 'mo')
  GROUP BY a
  HAVING
    COUNT(*) = 2
    AND COUNT(DISTINCT e) = 2
    AND COUNT(DISTINCT f) = 2
) 

Mysql相关问答推荐

S优化联接更新的最佳方式是什么?

可以在MySQL表名中使用表情包吗?

如何在Sequelize中将查询作为选项?

为分组记录MySQL取取值为TRUE的单行

如何从MySQL数据库中提取入职第一个月的工作天数?

如何在sql中包含0作为计数?

没有 ORDER BY 的查询性能很高,有 ORDER BY 的查询速度慢得像爬行一样

使用 presto 或 mysql 添加每个组中的缺失值

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

将递归 CTE 结果合并到辅助 SQL Select

SQL 根据多行值获取记录

将每组的总和除以总数

如何在 Windows 上访问 xampp 的命令行

在 MySQL 的存储过程中调用存储过程

在 Android 上运行 AMP (apache mysql php)

MySQL解释计划中 Select 优化的表的含义

MySQL术语约束与外键的区别?

Sequelize:销毁/删除表中的所有记录

在网页的 HTML 表中显示 MySQL 数据库表中的值

MySQLgo 除非数字字符进行比较