2016-06-27 4 views
0
내 데이터베이스 내가 특정 프로파일에 할당 된 고객 계정을 가지고 있고, 나는이 스키마에 같은 특정 범주에 할당 된 프로파일을 가지고, 다음과 같습니다

:대다 관계에서 특정 값을 얻기

| categories | | profiles | | categories_map   | 
--------------- ------------- ---------------------------- 
| ID | name | | ID | name | | ID | profile_id | cat_id | 
--------------- ------------- ---------------------------- 
| 1 | cat1 | | 1 | p1 | | 1 | 1  | 1 | 
| 2 | cat2 | | 2 | p2 | | 2 | 2  | 1 | 
| 3 | cat3 | | 3 | p3 | | 3 | 3  | 1 | 
        | 4 | p4 | | 4 | 1  | 2 | 
            | 5 | 3  | 2 | 
            | 6 | 4  | 3 | 


| profiles_map    | 
----------------------------- 
| ID | profile_id | acc_id | 
----------------------------- 
| 1 | 1   | 1  | 
| 2 | 3   | 1  | 
| 3 | 4   | 1  | 

계정에 할당 된 카테고리를 가져와야합니다. 즉, acc_id = 1의 카테고리를 가져 오려면 ID가 2와 3 인 카테고리를 가져야합니다. (ID가 2 인 카테고리는 ID가 2 인 프로필이 포함되어있어 적합하지 않습니다. 이 계정에는 할당되지 않음). 이 쿼리를 시도했지만 작동하지 않습니다.

select cats.id from profiles_map map 
right join categories_map catm on catm.profile_id = map.profile_id 
right join categories cats on cats.id = catm.cat_id 
where catm.profile_id in (select profile_id from profiles_map where acc_id = 1) 
and map.acc_id = 1 group by cats.id; 

아무도이 질문에 도움을 줄 수 있습니까?

답변

0

시도해 볼 수 있습니까? 당신은 단지 카테고리 ID를 얻고 싶다면

SELECT DISTINCT C.ID 
    FROM profiles_map PM 
    INNER JOIN categories_map CM ON CM.profile_id = PM.profile_id 
    INNER JOIN categories C ON C.ID = CM.cat_id 
    WHERE PM.acc_id= 1 
+0

:

SELECT DISTINCT cm.cat_id FROM categories_map cm WHERE cm.profile_id in (SELECT profile_id FROM profiles_map WHERE acc_id = 1) 

또는 사용 다음 쿼리, 다음 카테고리 이름과 ID를 얻으려면 이 계정에 할당되지 않은 프로필이있는 범주 찾기 – baskax

+0

스키마 또는 데이터 자체에 문제가 있어야합니다. – KaeL

0

, 쿼리 다음 시도하십시오 : 아직도

SELECT cat.id,cat.name FROM categories cm 
    WHERE cat.id in (SELECT DISTINCT cm.cat_id FROM categories_map cm 
    WHERE cm.profile_id in 
    (SELECT pm.profile_id FROM profiles_map pm WHERE pm.acc_id = 1)) 
관련 문제