MySQL은 where 절과 결합


130

조인하려는 두 개의 테이블이 있습니다.

categories 테이블의 모든 카테고리와 category_subscriptions 테이블의 사용자가 구독 한 모든 카테고리를 원합니다.

본질적으로 이것은 지금까지 내 쿼리입니다.

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions 
     ON user_category_subscriptions.category_id = categories.category_id

이것은 잘 작동하지만 쿼리 끝에 where 절을 추가하여 본질적으로 내부 / 동등 조인으로 만들고 싶습니다.

   SELECT *
    FROM categories
    LEFT JOIN user_category_subscriptions 
         ON user_category_subscriptions.category_id = categories.category_id 
   WHERE user_category_subscriptions.user_id = 1

하나의 쿼리 만 사용하여 특정 사용자가 구독 한 모든 범주와 모든 범주를 얻으려면 어떻게해야합니까?

category_id는 범주 테이블과 user_category_subscriptions의 키입니다. user_category_subscriptions 테이블에 상주하는 user_id

감사


실수하지 않으면 'Right Join'이라고합니다.
Tyler Carter

@TylerCarter 당신은 확실히 착각 :)
스쿠터 Daraf

답변:


287

join절이 아니라 절 에 넣어야 합니다 where.

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON 
    user_category_subscriptions.category_id = categories.category_id
    and user_category_subscriptions.user_id =1

inner join를 사용하여 join또는에 절을 넣는 것을 참조하십시오 where. outer join그러나을 사용하면 크게 다릅니다.

A와 join조건, 당신은 당신이 테이블에 합류 할 것이라는 행 집합을 지정합니다. 이러한 수단은 그 평가하는 user_id = 1제, 그리고 서브셋 얻어 user_category_subscriptionsuser_id의가 1있는 모든 행에 회원 가입을 categories. 이렇게하면의 모든 행이 제공 categories되지만 categories이 특정 사용자가 가입 한 user_category_subscriptions열만 정보를 갖게됩니다 . 물론 다른 모든 항목 은 열에 categories채워집니다 .nulluser_category_subscriptions

반대로, where절은 조인을 수행 한 다음 행 집합 줄입니다. 따라서 이것은 모든 조인을 수행 한 다음 user_id같지 않은 모든 행을 제거합니다 1. 을 얻는 비효율적 인 방법이 남아 inner join있습니다.

잘만되면 이것이 도움이된다!


2
질문을 잘 작성하고 정답을 작성하십시오! 내 시간을 절약했다. 고마워요!
Gaurav Phapale

1
나는 당신을 너무 사랑해 에릭이 울지 않도록 나를 구했다 : D
Raheel

반면에, 사용자를 위해 깨끗한 데이터를 생성하려면 두 번째 방법이 더 적합합니다. 맞습니까?
vlr

1
안녕하세요, user_category_subscriptions.user_id가 널입니다. B 테이블에 id가 null 인 A 테이블에서 세부 ID를 검색하려면
Veeresh123

Veeresh123 @, 무엇 AB표는? 질문을 바꾸실 수 있습니까?
Istiaque Ahmed

11

이 시도

  SELECT *
    FROM categories
    LEFT JOIN user_category_subscriptions 
         ON user_category_subscriptions.category_id = categories.category_id 
   WHERE user_category_subscriptions.user_id = 1 
          or user_category_subscriptions.user_id is null

이 코드를 사용해도 여전히 같은 오류가 발생하면 다음에 무엇을 찾아야합니까?
잭 프랜 젠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.