我有以下查询:
select title_id, shared_task_id from tasks_task order by title_id
结果如下:
title_id shared_task_id
1 99217
1 NULL
4 18873
4 18874
4 18875
4 NULL
4 NULL
4 NULL
我想找到所有shared_task_id
个title_id
以上的title_id shared_task_id
1 100
2 100
3 105
3 NULL
4 110
5 NULL
6 120
6 120
6 120
。
这是一个例子。使用以下数据:
title_id shared_task_id
1 100
2 100
查询将返回:
{{1}}
因为这是具有相同shared_task_id且具有不同标题的唯一条目。这里的正确查询是什么?
答案 0 :(得分:2)
听起来像是一个自我加入的方式。
select distinct t1.title_id, t1.shared_task_id
from mytable t1 join mytable t2 on t1.shared_task_id = t2.shared_task_id
and t1.title_id <> t2.title_id
答案 1 :(得分:1)
这应该这样做:
SELECT t1.* FROM tasks_task t1
JOIN (
SELECT shared_task_id FROM tasks_task
WHERE shared_task_id IS NOT NULL
GROUP BY shared_task_id
HAVING count(DISTINCT title_id) > 1
) t2 ON t1.shared_task_id = t2.shared_task_id
输出:
| TITLE_ID | SHARED_TASK_ID |
|----------|----------------|
| 1 | 100 |
| 2 | 100 |
小提琴here。
答案 2 :(得分:0)
SELECT title_id, shared_task_id
FROM myTable
WHERE shared_task_id IN (
SELECT shared_task_id
FROM myTable
GROUP By shared_task_id HAVING COUNT(*) > 1
)
更新:
SELECT title_id, shared_task_id
FROM myTable
WHERE shared_task_id IN (
SELECT shared_task_id
FROM ( SELECT DISTINCT title_id, shared_task_id FROM myTable ) A
GROUP By shared_task_id HAVING COUNT(*) > 1
)