如何只选择以特定topic_id(' 5000')开头/开头且包含多个topic_id的会话?伪代码中的WHERE子句中的代码。
Stack,Overflow
我知道这应该适用于子查询,但我不知道如何。谢谢!!
答案 0 :(得分:0)
您可以使用像{/ p>这样的HAVING
子句将查询更改为如下所示
SELECT
request_id,
session_id,
group_concat(topic_id order by request_id)
FROM sessions
GROUP BY session_id
HAVING MIN(topic_id) = '5000'
AND COUNT(DISTINCT topic_id) > 1
ORDER BY request_id;
答案 1 :(得分:0)
您可以LIKE
执行此操作:
select * from (
SELECT
request_id,
session_id,
group_concat(topic_id order by request_id asc SEPARATOR ' ,') as groups
, count(topic_id) as count_topic
FROM sessions
group by session_id
order by request_id asc
) as temp_table
WHERE (topic_id LIKE '5000%' AND count_topic > 1)
答案 2 :(得分:0)
这在MySQL中有点困难,但是当我们一步一步地执行它时并不太难:
查询:
select
request_id,
session_id,
(
select group_concat(topic_id order by request_id asc separator ' ,')
from requests topics
where topics.session_id = requests.session_id
)
from requests
where (session_id, request_id) in
(
select
session_id,
min(request_id)
from requests
group by session_id
having count(distinct topic_id) > 1
)
and topic_id = 5000;
(我冒昧地调用表requests
,因为它似乎是表中包含的请求记录,每个引用可能有一个单独的sessions
表的会话。)
select
min(request_id),
session_id,
group_concat(topic_id order by request_id asc separator ' ,') as topics
from requests
group by session_id
having topics like '5000 ,%';
如果可以有像'5000,5000'这样的会话(即一个会话有多个请求,但只有一个主题),那么你必须将and count(distinct topic_id) > 1)
添加到HAVING子句中。