我有一个名为 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/