2016-09-15 3 views
-1

이 자동차의 makerNameplateNumber에 대한 값이있는 경우 carName의 값이있는 car 데이터가있는 한 행을 정확하게 가져 오려고합니다. 예 : Ford Taurus, Ford, 4AD843. 어떤 이유로 Ford Taurus 접시 번호가없는 경우일부 필드가 null 인 조인 문제

, 나는 내가 sql 다음 시도 예를 들어,

Ford Taurus, Ford, null. 

을 판 번호 열에서 값이없는이 하나 개의 행을 싶어하지만 모든 makerlicense 테이블의 모든 값을 얻는다면, 나는 makerlicense 테이블에 car.idwhere 절에 제약 조건을 추가하는 경우 license의 값이 null 경우 I는 0 행을 얻을.

어떻게 이렇게 할 수 있습니까?

내가 뭘하려 : 당신이 left join을 찾고있는 것처럼

select 
    car.id as carID, 
    maker.carId as makerCarId, maker.name as makerName, 
    license.carId as licenseCarId, license.plateNumber as plateNumber 
from 
    car car, 
    maker maker, 
    license license 
    where car.id = 4951 
; 
+0

현대적이고 명시적인 JOIN 구문으로 전환합니다. 쓰기가 쉽고 (오류없이), 읽기 쉽고 필요에 따라 외부 조인으로 변환하기가 더 쉽습니다. – jarlh

+0

테이블 조인 조건은 어디에 있습니까? 교차 제품을 얻습니다. – Jens

답변

1

당신은 SQL LEFT JOIN 키워드를 사용한다 (car) 왼쪽 테이블의 모든 행을 반환 , 일치하는 행은 오른쪽 표 (maker 또는 license)에 있습니다. 결과가 일치하지 않을 때 오른쪽에 NULL입니다.

SELECT car.id AS carID 
    , maker.name AS makerName 
    , license.plateNumber AS plateNumber 
FROM car AS car 
LEFT JOIN maker AS maker ON car.id = maker.carId 
LEFT JOIN license AS license ON car.id = license.carId 
WHERE car.id = 4951 
0

이 보인다 :

SELECT 
    car.id AS carID, 
    maker.carId AS makerCarId, maker.name AS makerName, 
    license.carId AS licenseCarId, license.plateNumber AS plateNumber 
FROM 
    car 
JOIN 
    maker ON car.id = maker.carId 
LEFT JOIN 
    license ON car.id = license.carId 
where car.id = 4951 
0

쿼리 결과는 car, maker 및 license 테이블 간의 직교 조인입니다. 그러면 WHERE 절에 제공된 모든 ID가있는 행이 생성됩니다.

예상되는 결과를 얻으려면 쿼리에 사용 된 테이블간에 필터 또는 조인 조건을 사용하여 결과 집합을 구체화해야합니다.

은 당신의 예상 결과를 아래의 쿼리를 사용 : 나는 아무 번호판이없는 경우에도 원하는 결과를 얻기 위해 상태 OUTER JOIN을 추가 한

SELECT car.id AS carID , maker.name AS makerName , license.plateNumber AS plateNumber FROM car AS car JOIN maker AS maker ON car.id = maker.carId LEFT OUTER JOIN license AS license ON car.id = license.carId WHERE car.id = 4951;e

. JOIN 조건 만 사용하면 차량에 번호판 번호가없는 경우 원하는 결과를 가져 오지 않습니다.

관련 문제