2013-06-09 2 views
1

안녕 avid의 조합에 따라 plistid을 가져와야합니다. 예를 들어 1과 4의 조합으로 제출 된 avidplistid (1)을 반환해야합니다. 또 다른 예는 2와 5의 조합을 제출했을 때입니다. avidplistid을 반환해야합니다. 1과 3을 제출하면 같은 attributeid이기 때문에 아무 것도 반환하지 않습니다.mysql - 다른 열의 값 조합을 기반으로 열을 선택하십시오.

어떻게 내가 MySQL의 에서 생성 할 수 있습니다 여기에 내 테이블
property

주 : 탐욕이 제출 된 수에 따라 1,2,3 또는 4 숫자의 조합이 될 수 열렬한.

+3

. 모든 * 예제 * 대신에, * 규칙 *을 명시하시오. – Matanya

+0

두 입력 모두에 대해 동일 할 때 그는 'plistid'하고 싶습니다. – sarwar026

+0

나는 열렬한 주어진 조합을 바탕으로 plistid를 얻을 필요가 – Kiel

답변

1

먼저 avid의 모든 일치 항목을 찾아 plistid으로 찾아서 attributeid이 서로 다른지 확인하십시오. 당신은 설정 - 내 - 세트 쿼리의 변형으로, 집계 이것을 수행 할 수 있습니다 having 절에

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 

처음 두 조건은 당신이 원하는 avid의 말. 그들은 avid이 값 중 하나와 함께 나타나는 횟수를 세고 있으며, 각 값은 적어도 하나의 값이 발견 될 때만 true를 반환합니다. 마지막으로 행에 고유 한 속성 ID가 필요하다는 것입니다.

0

시도 : 무엇 이것에 대해

select plistid 
from t 
where avid in (1,4) 
group by plistid 
having count(distinct avid) =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 
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; 
관련 문제