2014-04-21 2 views
0

세 개의 열이있는 테이블이 있습니다.여러 행의 일치 값

image   ppid cpid 
1st_image.jpg 10395 10019 
1st_image.jpg 10395 10371 
1st_image.jpg 10395 10311 

2nd_image.jpg 10395 10019 
2nd_image.jpg 10395 10371 

PPID를가 10395이며, 여기서 cpid는 10019, 10371 및 10311 어디는 1st_image.jpg를 선택할 수 있습니까? 기본적으로 모든 cpids가 일치하는 경우에만 이미지를 선택하지만 여러 행에 걸쳐 있기 때문에 간단한 WHERE 문을 사용하여 이미지를 선택할 수 없습니다.

편집 : 그것은 모든 여기서 cpid 년대 (10019, 10371, 10311) MYTABLE에서

+0

[MySQL의 Select 가능한 ID는 여러 행에 특정 값이있는 행에서 발생합니다] (http://stackoverflow.com/questions/7407001/mysql-select-ids-which-occur-on-different- rows-with-multiple-specific-values-fo) –

+0

Bill, 두 번째 해결책을 시도했지만 작동하지 않습니다. 나는 5를 얻었지만, 3이되어야한다고 생각한다. –

+0

내가 추가 한 [tag : relational-division] 태그로 다른 질문에 대한 답을 얻을 수있을 것이다. –

답변

0

선택 이미지와 일치하지 않기 때문에 내가 명시 적으로 2nd_image.jpg을 언급하는 것을 잊었다 은 선택하지 않아야합니다 곳 PPID = 10395과에서 여기서 cpid (10019, 10371, 10311)

+0

답장을 보내 주셔서 감사합니다. 이것은 또한 나의 첫 번째 아이디어였다. 그러나 첫 번째 이미지를 찾고있을 때 모든 이미지 (1st_image.jpg 및 2nd_image.jpg)를 반환합니다. –

0

나는 당신이 원하는 것을 100 % 확신하지만, 나는 이것이 당신은 당신의 테이블 T1을 대체 할 수

select 
    image, 
    group_concat(cpid) 
from 
    (select '1st_image.jpg' image, 10395 ppid, 10019 cpid union all 
    select '1st_image.jpg' image, 10395 ppid, 10371 cpid union all 
    select '1st_image.jpg' image, 10395 ppid, 10311 cpid union all 
    select '2nd_image.jpg' image, 10395 ppid, 10019 cpid union all 
    select '2nd_image.jpg' image, 10395 ppid, 10371 cpid) t1 
group by 
    image 
having 
    group_concat(cpid) like '%10371%' and 
    group_concat(cpid) like '%10311%' and 
    group_concat(cpid) like '%10019%' 

작동합니다 생각합니다. 근본적으로 무슨 일이 벌어지고 있는가? 이미지 그룹과 모든 cpids를 하나의 행으로 연결하는 것입니다. 원하는 경우 ppid 관련 필터를 추가 할 수 있습니다.

+0

이 솔루션을 사용해 보았는데 제대로 작동하는 것 같습니다. 테이블이 커지면 성능이 떨어지는가? –

+0

잠재적으로 데이터가 저장되는 방식에는 너무 많은 옵션이 없습니다. ppid, cpid_10019, cpid_10371, cpid_10311 이미지를 선택하도록 테이블을 피벗 할 수 있습니다. 그러면 where 문을 사용할 수 있습니다. 이런 식으로하는 것은 실제로 그렇게 유연하지는 않지만 똑같은 것을 성취 할 것입니다. 본질적으로 case 문을 사용하여 피벗과 그룹을 하나의 행으로 병합 할 수 있습니다. 개인적으로는 덜 복잡하기 때문에 이걸로 갈 것입니다 @ user1288263 –