mysql - 选择一列中具有相似值的行

标签 mysql

我有一个名为 trades 的表,并且有一个字段 session ID。该表具有具有相似 session ID 的特定行。某些行具有相似 session ID 的原因是,当进行交易时,它需要一个现有的 session ID。

我现在想要选择具有相似 session ID 的行并对其执行某些操作。

这是我的第一个查询,列出了所有行

SELECT * FROM trades 
where trade_session_status="DONE" AND 
      trade_profit_worker_status="UNDONE" 

我也尝试过这个查询

SELECT * FROM trades 
where trade_session_status="DONE" AND 
      trade_profit_worker_status="UNDONE" 
order BY(session_id)

我查看了不同的查询并提出了这个查询

SELECT DISTINCT session_id,id 
FROM trades 
WHERE trade_session_status="DONE" AND 
      trade_profit_worker_status="UNDONE"  
ORDER BY session_id

#2 和 #3 查询都返回相同的行数。我的问题是,#2 和 #3 查询是否始终返回具有不同 session_id 的行,而不遗漏任何行?

最佳答案

在我看来,你可以使用 EXISTS 来实现这一点。

SELECT * 
FROM trades t
WHERE trade_session_status = 'DONE' 
  AND trade_profit_worker_status = 'UNDONE'
  AND EXISTS 
      (
        SELECT 1
        FROM trades d
        WHERE d.trade_session_status = 'DONE' 
          AND d.trade_profit_worker_status = 'UNDONE'
          AND d.session_id = t.session_id
          AND d.id <> t.id
      );

请注意,trade_session_status 和 trade_profit_worker_status 的条件也用于 EXISTS 的查询中。我不知道您的目的是否需要这样做,因此如果这不是您所期望的,请将其删除。但你明白了。

另一种方法是使用重复的 session_id 内连接到子查询。

SELECT t.* 
FROM trades t
JOIN 
(
   SELECT session_id
   FROM trades
   WHERE trade_session_status = 'DONE' 
     AND trade_profit_worker_status = 'UNDONE'
   GROUP BY session_id
   HAVING COUNT(*) > 1
) d ON d.session_id = t.session_id
WHERE t.trade_session_status = 'DONE'
  AND t.trade_profit_worker_status = 'UNDONE';

关于mysql - 选择一列中具有相似值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258247/

相关文章:

mysql - 从 INT 列中获取一个条目作为字符串?

mysql - 将某些值从 mysql 同步到 sqlite

MySQL 将行转为动态数量的列

mysql - 将具有多个值的 MySql 列转换为正确的表

java - hibernate : One Entitiy class for multiple purpose?

添加第三个 INNER JOIN 后,mySQL 查询需要更长的时间

php - Mod 重写模式问题

mysql - 如何使用 SQL 偏移表列?

Mysql:依赖于列的 COUNT() 的 WHERE 语句?

mysql:神秘的横向单引号和 IS NOT NULL