请问大佬们,这种中间表怎么查呢?

 

不能用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