mysql - 如何使用减号运算符编写sql查询以返回缺少相应值的行?

标签 mysql sql

我有包含 transaction_id、transaction_category 和 transaction_quantity 列的交易表。请查看下面的示例数据

<表类=“s-表”> <标题> transaction_id transaction_category transaction_quantity <正文> 112 销售 1000 112 内部 1000 113 销售 1000 114 销售 1000 114 内部 1000 115 销售 1000 115 外部 1000 116 销售 1000 116 内部 1000

在给定的表中,请注意 transaction_id 112 具有“sale”和具有相同 transaction_id 和“internal”类别的相应行。与 transaction_id 114 相同。但是 transaction_id 113 的第三行没有另一行“内部”类别,并且 transaction_id 115 也没有对应的“内部”类别行(它有外部)。

我需要获取 transaction_category 为“sale”但没有相应的 transaction_category 为“internal”的所有交易的列表。因此,在上述情况下,它应该返回 transaction_id 为 113 和 115 的行。我试图用减号运算符来执行此操作,但尝试执行此操作时遇到了困难。

编辑:该表大约有 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 - 如何使用减号运算符编写sql查询以返回缺少相应值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74691492/

相关文章:

mysql - 表索引不起作用

c# - 向存储过程添加新参数

sql - 使用 clickhouse 计算当前行和上一行之间的差异(或增量)

mysql - 更新多重内连接的表

mysql - 如何从表格中选择日期范围内的值聚合

MYSQL查询选择计数字段

sql - 选择检索值的子串

mysql - 如何在mysql中将3个月添加到 '01-01-2014'

PHP MySQL : Troubleshoot query

mysql - PostgreSQL 在不乘列的情况下连接两个表