2014-09-13 2 views
0

불행히도 나는이 말을하는 방법을 잘 모르기 때문에 다른 곳에서 답을 얻었지만 찾지 못했습니다. 그것은 어쨌든 간단한 질문처럼 보입니다. 나는이 일을 오래도록 할 수있는 방법을 생각할 수 있지만, SQL에 상당히 익숙하다는 점을 감안할 때 가장 효율적인 방법이 무엇인지 궁금하지 않았습니다.MySQL - 표에서 여러 행에 표시되는 경우 사용자 ID를 선택하십시오.

다음은 내가 가지고있는 데이터의 예입니다. 두 개의 조인 된 테이블.

------------------------------------------------------- 
userid attributeid attributename attributetype 
------------------------------------------------------- 
1   1    Python   Skill 
1   5    C++    Skill 
1   2    London   Location 
2   1    Python   Skill 
2   3    Warsaw   Location 
3   4    MySQL   Skill 
3   2    London   Location 

문제 :는 기본적으로,이 기술 ('파이썬'OR 'MySQL을')과 위치 '런던'이있는 사용자의 ID를 끝내고 싶다.

따라서이 예제에서는 사용자 ID 1로 끝날 것 3.

어떤 생각? 이것이 전에 태클 된 경우 다른 곳으로 안내해주십시오.

+0

'SELECT 사용자 ID [을 표] WHERE에 attributename ('파이썬', 'MySQL을') AND에서 AttributeType에 = '스킬'을 선택 IN (용자 ID 사용자 ID [[표] WHERE attributename = '런던'AND attributetype = '위치')' –

답변

0

은 외모와 테이블 속성. 이 쿼리보십시오 : FROM

SELECT userid 
FROM users 
WHERE EXISTS 
    (SELECT 1 
    FROM attributes 
    WHERE users.userid = attributes.userid 
     AND attributetype = 'Skill' 
     AND attributename IN ('Python', 
          'MySQL')) 
    AND EXISTS 
    (SELECT 1 
    FROM attributes 
    WHERE users.userid = attributes.userid 
     AND attributetype = 'Location' 
     AND attributename = 'London') 
+0

환상적 ... 간단하고 효과적입니다! 실제로 세 개의 테이블이 있습니다 : User, Attributes 및 두 개의 테이블을 연결하는 userAttributes 접합 테이블. 위의 표는 AttributeId에 피벗 된 Attributes 및 userAttributes 테이블의 샘플입니다 (미안하지만 분명히해야합니다).하지만 약간 수정하면 해결할 수있었습니다 - 감사합니다 :) –

0

이 당신을 도울 수 있습니다

여기
select userid from tag where attributetype='Skill' AND 
attributename IN ('Python','MySQL') AND userid IN 
(select distinct(userid) from tag where 
    (attributetype='Location' AND attributename='London')) 
0

당신에게 요청한 결과를 얻어야한다 기본적인 쿼리 :

SELECT `userid` 
FROM `table_name_goes_here` 
WHERE (`attributename` IN ('Python', 'MySQL') AND `attributetype` = 'Skill') 
AND (`attributename` IN ('London') AND `attributetype` = 'Location') 
GROUP BY `userid` 
0

당신은 가입 자체를 사용할 수를 attributetype에 대한 하나의 스킬 및 기타입니다 attributetype의 위치는 다음 위치 조건을 조정하십시오. attributename

select t.* 
from t 
join t t1 on(t.userid= t1.userid) 
where t.attributetype ='Skill' 
and t1.attributetype ='Location' 
    and t.attributename in('Python','MySQL') 
and t1.attributename = 'London' 
당신이 사용자와 표준 설정을 가지고있는 것처럼

Demo

0
SELECT userId 
FROM table 
WHERE attributename = 'London' 
    AND attributename in ('MySQL', 'Python') 
관련 문제