我的TRANSACTION表包含Transaction_id、Transaction_Category和Transaction_Quantity列.请查看下面的示例数据

transaction_id transaction_category transaction_quantity
112 sale 1000
112 internal 1000
113 sale 1000
114 sale 1000
114 internal 1000
115 sale 1000
115 external 1000
116 sale 1000
116 internal 1000

请注意,在给定表中,Transaction_id 112既有‘Sales’,也有对应的行,具有相同的Transaction_id和‘Internal’类别.它与Transaction_id 114相同.但是,具有Transaction_id 113的第三行没有另一行具有‘INTERNAL’类别,并且TRANSACTION_ID 115也没有具有‘INTERNAL’类别的对应行(它具有EXTERNAL).

我需要获取TRANSACTION_CATEGORY为‘SALE’但没有相应的TRANSACTION_CATEGORY为‘INTERNAL’的所有交易的列表.因此,在上面的例子中,它应该返回Transaction_id为113和115的行.我试图用减号运算符来做这件事,但一直在try 这样做时碰壁.

编辑:表格大约有5000行,没有一列被编入索引.此外,还有其他类别.我会更新我的桌子.

推荐答案

MySQL 8.0.31解决方案,现在支持EXCEPT.

select distinct transaction_id from transaction where transaction_category = 'sale'
except
select transaction_id from transaction where transaction_category = 'internal';

MINUS是Oracle发明的同义词,支持与其他一些SQL实现兼容(但不支持MySQL).

我将distinct放在该查询中是因为从您的描述中不清楚对于给定的Transaction_id,每个类别是否只能有一行.

另见:

Mysql相关问答推荐

嵌套MySQL语句问题

错误:数据包顺序错误.GET:0预期:10 node JS MySQL

运行简单查询时Prisma预准备语句错误

Mysql-查找缺少列的表

MYSQL "Like" 正向和反向词序查询

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

MySQL如何将字符串列表与子查询进行比较

创建 mySQL BEFORE/AFTER UPDATE 触发器

MySQL过滤食谱上的多对多 - 成分表

在 MySQL 中为多列创建索引以进行查询优化

是否可以从 .SQL 文件中计算表中的行数?

在 MySQL 中,我应该 Select 哪种排序规则?

MySQL触发器在某些条件下防止INSERT

不正确的整数(2147483647)被插入到 MySQL 中?

在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

将 mySQL 查询作为 cron 作业(job)运行?

在 Yii2 中执行原始 SQL 查询?

MySQL:切换 int 字段值的简单方法

与 MySql 的连接正在自动中止.如何正确配置Connector/J?

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询