嗨,我需要根据给定的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。