mysql - 根据另一列的值组合选择一列

时间:2013-06-09 15:18:54

标签: php mysql

嗨我需要根据plistid的给定组合得到avid。例如,我提交了1和4 avid的组合,它应该返回plistid的1.另一个例子是当我提交2和5 avid的组合时,它应该返回{ 5.如果我提交1和3,它应该不返回任何内容,因为它们是plistid相同的。{1}}。

我如何在mysql中生成它 这是我的桌子 property

注意:avid可以是1,2,3或4个数字的组合,具体取决于提交的avid数量。

4 个答案:

答案 0 :(得分:1)

首先,按avid查找plistid的所有匹配项,然后检查它们是否有不同的attributeid。您可以使用聚合执行此操作,作为set-within-sets查询的变体:

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。它们计算avid与其中一个值一起出现的次数,每个值仅在找到至少一个值时才返回true。最后一个是说你需要在行上使用不同的属性ID。

答案 1 :(得分:0)

尝试:

select plistid
from t
where avid in (1,4)
group by plistid
having count(distinct avid) =2

答案 2 :(得分:0)

这个怎么样?

SELECT t1.plistid 
FROM t t1
JOIN t t2 
    ON t1.attributeid != t2.attributteid
    AND t1.plistid = t2.plistid
WHERE 
    t1.avid = 1
    AND t2.avid = 4

答案 3 :(得分:0)

试试这个: -

select a.plistid 
from your_table a, your_table b
where a.plistid = b.plistid
and a.avid = <first param>
and b.avid = <second param>
and a.attributeid <> b.attributeid;