2011-03-03 3 views
3

나는 서브 쿼리가 어떻게 작동하는지 그리고 그것이 효율적인지에 관해서는 어려움을 겪는 데 어려움을 겪고있다. 나는 모든 테이블을 설명하지 않을거야,하지만 그냥 배열의 쌍을 가지고 생각 ... 나는 PHP에서 할 수 있지만 내가 MySQL에서 바로 할 수 있는지 궁금해 ...mysql 교차, 비교, UNION과 반대입니까?

이것은 내 쿼리 1이 목록에 자신이 소유하고 얼마나 많은 항목 사용자가 확인하는 것은

SELECT DISTINCT * 
FROM list_tb 
INNER JOIN item_to_list_tb 
ON list_tb.list_id = item_to_list_tb.list_id 
WHERE list_tb.user_id = 1 
ORDER BY item_to_list_tb.item_id DESC 

이 2이 목록에 그가 지금

SELECT DISTINCT * 
FROM list_tb 
INNER JOIN item_to_list_tb 
ON list_tb.list_id = item_to_list_tb.list_id 
WHERE list_tb.user_id = 1 
ORDER BY item_to_list_tb.item_id DESC 

홍보 소유하고 얼마나 많은 항목 사용자 확인하기 위해 내 쿼리입니다 oblem은 그 결과를 교차 시켜서 공통된 item_id 수를 확인합니다.

감사합니다 !!!

답변

2

불행히도 MySQL은 Intersect 술어를 지원하지 않습니다.

Select ... -- everything except List_Tb.UserId 
From List_Tb 
    Inner Join Item_To_List_Tb 
     On List_Tb.List_Id = Item_To_List_Tb.List_Id 
Where List_Tb.User_Id In(1,2) 
Group By ... -- everything except List_Tb.UserId 
Having Count(Distinct List_Tb.User_Id) = 2 
Order By item_to_list_tb.item_id Desc 

은 분명히 당신이 반환 할 실제 열이하고있는 타원을 대체 할 것이다 : 그러나, 그 목표를 달성하는 한 가지 방법은 당신의 선택 및 그룹으로부터 List_Tb.UserId을 제외하고 뚜렷한 USER_ID에 의해 계산하는 것 당신은 그룹화하고 싶습니다.

+1

작동하지 않습니다! – Francesco