MySQL 查询行,仅当行项在其他行中不存在时才返回行

标签 mysql sql

     ID      stone_free    original_stone_id
   ------- | ---------- | -------------------
     1     |     0      |         1
     2     |     1      |         2
     3     |     1      |         1

只有当 stone_free 等于 0 并且每行的其他行中没有相应的 original_stone_id 时,我才想从表中返回行 .因此,例如在上面的示例中,第 1 行的 stone_free 为 0,并且第 3 行中有相应的 original_stone_id,因此查询不应返回任何行。

在下面的示例中,第 1 行的 stone_free 为 0,但另一行中没有相应的 original_stone_id,因此查询应返回第 1 行。

     ID      stone_free    original_stone_id
   ------- | ---------- |  -------------------
     1     |     0      |         1
     2     |     1      |         2

最佳答案

一个简单的 LEFT JOIN 就可以做到;

SELECT a.* 
FROM Stones a
LEFT JOIN Stones b ON a.ID<>b.ID AND a.original_stone_id = b.original_stone_id
WHERE b.ID IS NULL AND a.stone_free=0

演示 here .

关于MySQL 查询行,仅当行项在其他行中不存在时才返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11915135/

相关文章:

MYSQL SUM 语法

sql - 如何避免 Rails as_json 创建大量数据库请求

sql - 使用 sql/sequelize 通过 userId 获取喜欢的帖子并获取帖子的喜欢计数

php - 查询错误得不到数字

mysql - 查找字符串中数字的位置

mysql - 是否有 MySQL/MariaDB 的原生图形数据库扩展?

mysql - 如果插入多个类别,结果会重复

mysql - 如何将字符串 'mm-yyyy'列转换为MYSQL中的时间戳?

mysql - SQL,COUNT 在我的 mysql 查询中不起作用

MySQL = 按月份对销售计数进行分组,然后将月份显示为名称(一月、二月...十二月)而不是数值(1,2,3-12)