不能用and =1 and =2 and =4 这种,因为表C 会随时变动
不是很懂,你不让使用 and = 1 and = 2 ,但是又让查询类型ID为 1,2,4 的。
SELECT
*
FROM
a
JOIN c ON a.项目 ID = c.项目 ID
JOIN b ON b.类型 ID = c.类型 ID
WHERE
a.项目 ID = 2
这样应该就能满足你的需求了。
SELECT
*
FROM
a
JOIN c ON a.项目 ID = c.项目 ID
WHERE
c.类型 ID in (所有状态)
GROUP BY
a.项目 ID
HAVING
COUNT(a.项目 ID) == 所有状态的数量
只有所有状态都满足都情况下,COUNT(a.项目 ID) == 所有状态的数量 才会满足
不让写and 是因为,现在 让子弹飞 是有3个类型,所以写3个and当然可以
但是以后如果出现一个 有100个类型的呢,那岂不是要写100 个。那不是全乱套了
select d.项目ID from
(SELECT 项目ID,GROUP_CONCAT( 类型ID ) as value FROM C GROUP BY 项目ID) d
where d.value="1,2,4" 大概可以吧,性能我就没考虑了
SELECT
d.PID
FROM
(SELECT
PID, COUNT(TID) as CNT
FROM
C
WHERE
TID IN('1','2','3')
GROUP BY
PID) d
WHERE
d.CNT=3
思路大概是这样,语法不知道有没有问题。
先筛选出类型ID在参数列表中的所有记录,再进行分组计数,筛选出记录数为参数列表长度的组。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632