2 개의 테이블이 있다고 가정 해 봅시다.SQL 조건부 내부 조인
Nav:
-----------
id INT NOT NULL,
title VARCHAR(50) NOT NULL,
target_page INT DEFAULT NULL;
Pages:
-----------
id INT NOT NULL,
url VARCHAR(200) NOT NULL,
access_level INT NOT NULL;
Nav의 target_page는 NULL 일 수 있습니다. 나는 내부를 사용할 수있는 탐색에서 데이터를 선택하는 동안 페이지에서 URL를 얻기 위해 원하는 경우 가입 : 시스템의 현재 사용자 말
그래서SELECT Nav.id, Nav.title, Pages.url FROM Nav
INNER JOIN Pages ON Pages.id = Nav.target_page
내가 추가 조건을 추가하려면이 만 볼 수 있습니다 이너 가입
SELECT Nav.id, Nav.title, Pages.url FROM Nav
INNER JOIN Pages ON Pages.id = Nav.target_page
WHERE Pages.access_level <= OurImaginaryUserLevel
사용자가 행 ACCESS_LEVEL는 사용자의보다 큰의 페이지에 기록에 연결되어 탐색에서 반환하지 않는 것을 보장 : 페이지 그들은 내가 추가 조건을 추가 할 수 있습니다에 액세스 할 수 있습니다.
그러나 Nav의 일부 레코드에는 NULL의 target_page가 있습니다. INNER JOIN이 ID가 NULL 인 페이지에 레코드가 없으므로 INNER JOIN이 반환하지 못하도록하더라도이 레코드를 반환하고 싶습니다.
NULL의 target_page가있는 레코드 만 INNER JOIN에서 제외됩니다. Pages 테이블에 일치하는 것이 있고 Pages.access_level 조건이 충족되는 경우에만 NULL이 아닌 target_page 레코드가 반환되어야하므로 왼쪽 결합을 사용할 수 없습니다.
나의 요구 사항을 이해하기 어려운 경우 사과드립니다. 더 이상 질문하지 마십시오.
멋지다 훌륭합니다! Left Join을 사용하면 WHERE 절에 조건을 넣든 ON 절 뒤에 조건을 넣든 상관 없습니다. 고마워요! –
도움이 될 수있어서 기쁩니다. :) –