给定一个如下所示的表xf_conversation_recipient
:
+----------------+----------------+
|conversation_id |recipient_state |
+----------------+----------------+
|1 |delete |
|1 |delete |
|2 |active |
|2 |delete |
|3 |delete |
|3 |delete |
|4 |active |
|4 |delete |
|5 |active |
|5 |active |
|6 |delete |
|6 |delete |
+----------------+----------------+
以下查询返回符合您条件的所有对话的 ID
SELECT
conversation_id AS selectedId,
count(*) AS count
FROM xf_conversation_recipient
WHERE recipient_state = "delete"
GROUP BY conversation_id
HAVING count>1
回报:
+-----------+------+
|selectedId |count |
+-----------+------+
|1 |2 |
|3 |2 |
|6 |2 |
+-----------+------+
请注意,根据您的应用程序,您可能希望在此处停止。
嵌套这个查询,我们可以只提取selectedId
列,然后再次嵌套它,我们可以将它用作IN
查询的条件,如下所示:
SELECT * FROM xf_conversation_recipient
WHERE xf_conversation_recipient.conversation_id IN (
SELECT t1.selectedId FROM (
SELECT
conversation_id AS selectedId,
count(*) AS count
FROM xf_conversation_recipient
WHERE recipient_state = "delete"
GROUP BY conversation_id
HAVING count>1
) t1
)
返回:
+----------------+----------------+
|conversation_id |recipient_state |
+----------------+----------------+
|1 |delete |
|1 |delete |
|3 |delete |
|3 |delete |
|6 |delete |
|6 |delete |
+----------------+----------------+