我觉得我正在服用疯狂的药片。
我有一张名为problems
的表格。它看起来像:
id | pid | problem_list_id
-----------------------------------
1 | 159 | 16
2 | 159 | 4
3 | 10 | 16
4 | 565 | 90
5 | 565 | 4
6 | 122 | 12
我想查询问题_id为16和4的pid
。
SELECT
YEAR(pbd.date_created),
COUNT(*)
FROM
patient_booking_data pbd inner join problems p on pbd.pid = p.pid
WHERE p.problem_list_id in (16,4)
GROUP BY YEAR(pbd.date_created)
ORDER BY YEAR(pbd.date_created)
这显然会达到16或4.我需要16和4的pid。
当我尝试使用时:
WHERE (p.problem_list_id = 16 AND p.problem_list_id = 4)
这不会产生任何结果。
我可以使用类似的东西:
SELECT
YEAR(pbd.date_created),
COUNT(*)
FROM
patient_booking_data pbd inner join problems p on pbd.pid = p.pid
WHERE p.problem_list_id = 16
AND pbd.pid in (SELECT pid FROM problems where problem_list_id = 4)
GROUP BY YEAR(pbd.date_created)
ORDER BY YEAR(pbd.date_created)
但是使用嵌套的select
似乎有点矫枉过正。
我错过了一些明显的东西吗?
答案 0 :(得分:2)
我不确定为什么您的查询与数据表不同?
但是使用您的数据表,您可以使用SELECT pid
FROM problems
WHERE problem_list_id in (16,4)
GROUP BY pid
HAVING COUNT(DISTINCT problem_list_id) = 2
16 or 2
我使用不同的情况,如果pid可能会出现COUNT(*)
多次出现,否则只有patient_booking
就足够了
也许你需要这样的东西。使用cte首先计算pid,然后返回WITH cte as (
SELECT pid
FROM problems
WHERE problem_list_id in (16,4)
GROUP BY pid
HAVING COUNT(DISTINCT problem_list_id) = 2
)
SELECT
YEAR(pbd.date_created),
COUNT(*)
FROM patient_booking_data pbd
JOIN CTE c on pbd.pid = c.pid
GROUP BY YEAR(pbd.date_created)
ORDER BY YEAR(pbd.date_created)
onActivityResult()