1

嗨,我需要plistid根据给定的组合来获取avid. 例如,我提交了 1 和 4 的组合avid,它应该返回plistid1。另一个例子是,当我提交 2 和 5 的组合时,avid它应该返回 5 的 a plistid。如果我提交 1 和 3,它应该什么也不返回,因为它们是一样的attributeid

我如何在mysql中生成它这是我的表
财产

注意:根据提交的 avid 数量,avid 可以是 1、2、3 或 4 个数字的组合。

4

4 回答 4

1

首先,找到avidby 的所有匹配项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。

于 2013-06-09T15:31:19.173 回答
0

尝试:

select plistid
from t
where avid in (1,4)
group by plistid
having count(distinct avid) =2
于 2013-06-09T15:34:34.263 回答
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
于 2013-06-09T15:34:53.810 回答
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;
于 2013-06-09T15:35:56.053 回答