2017-11-27 6 views
1

두 개의 컬럼을 조인하려고하고 있는데 조건은 오른쪽 테이블의 삭제 및 활성 컬럼을 기반으로합니다.SQL LEFT JOIN 다른 컬럼의 where 절

쿼리 - 조건에 일치하는 어떤 다른의 기록 또는 오른쪽 테이블이없는 경우>

SELECT 
    `s`.`slider_id` as `id`, 
    `s`.`slider_type` as `type`, 
    `s`.`slider_name` as `name`, 
    `sd`.`slider_data_type` AS `sd_type`, 
    `sd`.`slider_data_value` AS `sd_value`, 
    `sd`.`slider_data_group` AS `sd_group`, 
    `sd`.`slider_data_id` AS `sd_id` 
FROM `sliders` AS `s` 
LEFT OUTER JOIN `slider_data` AS `sd` 
    ON `s`.`slider_id` = `sd`.`slider_data_s_id` 
WHERE 
    `s`.`slider_id` = '11' AND 
    ((`sd`.`slider_data_active` = 1 AND `sd`.`slider_data_delete` =0) OR 
     (`sd`.`slider_data_active` IS NULL AND `sd`.`slider_data_delete` IS NULL)) 

쿼리는 잘 작동한다. 하지만 활성화되지 열과 오른쪽 테이블의 열을 삭제할 때

`sd`.`slider_data_active` = 0 AND `sd`.`slider_data_delete` = 1 

나는 여전히 주 또는 왼쪽 테이블에서 데이터를 검색 할 때 0과 1

활동 0과 오른쪽에서 NULL과 동일합니다 (1)을 삭제 열

해결 방법을 알려주세요.

답변

2

이동 테이블 가입 조건 (ON)에 WHERE 절에 AND 조건, 당신은 다음의 시작은 INNER JOIN처럼 행동 WHERE 절에 LEFT JOINED 테이블을 사용하여 정확히 일치하는 항목이 발견되는 경우에만 결과를 제공합니다.

SELECT `s`.`slider_id` as `id`, `s`.`slider_type` as `type`, `s`.`slider_name` as `name`, `sd`.`slider_data_type` AS `sd_type`, `sd`.`slider_data_value` AS `sd_value`, `sd`.`slider_data_group` AS `sd_group`, `sd`.`slider_data_id` AS `sd_id` 
FROM `sliders` AS `s` 
LEFT OUTER JOIN `slider_data` AS `sd` ON `s`.`slider_id` = `sd`.`slider_data_s_id` AND ((`sd`.`slider_data_active` = 1 AND `sd`.`slider_data_delete` =0) OR (`sd`.`slider_data_active` IS NULL AND `sd`.`slider_data_delete` IS NULL)) 
WHERE `s`.`slider_id` = '11' 
+1

감사합니다. –