嗨,我需要根据给定的plistid组合得到avid。例如,我提交了1和4的组合avid,它应该返回1的plistid。另一个例子是,当我提交2和5的组合时,它应该返回5的avid。如果我提交了1和3,它应该不会返回任何内容,因为它们是相同的plistid
如何在mysql中生成
这是我的桌子
注意:avid可以是1、2、3或4个数字的组合,具体取决于avid提交的数字。

最佳答案

首先,通过avid找到plistid的所有匹配项,然后检查它们是否具有不同的attributeid。可以通过聚合(作为集合内集合查询的变体)完成此操作:

select plistid
from t
group by plistid
having sum(avid = 1) > 0 and
       sum(avid = 4) > 0 and
       count(distinct case when avid in (1, 4) then attributeid end) = 2

having子句中的前两个条件是您想要什么。他们正在计算avid与其中一个值一起出现的次数,每个值只有在至少找到一个值时才返回true。最后一种说法是,行上需要不同的属性id。

10-04 16:01