2017-12-10 16 views
-1

Car 소유의 Car 소유 소유 관계를 고려하십시오.관련된 결과를 반환하는 쿼리이지만 관련 행이없는 경우에도 여전히 행

테이블 : 사람 PersonID 으로 PersonName

자동차 CarID PersonID (사람 fkey) CarName

휠 WheelID CarID (자동차에 fkey) 내가 필요

위치 어떤 사람에게 속한 모든 바퀴를 보여주는 쿼리. 바퀴가없는 경우, 저는 sti입니다. 사람 이름이있는 단일 행이 필요합니다.

Sally, Car 1, Wheel 1 
Sally, Car 1, Wheel 2 
Sally, Car 2, Wheel 3 
Bob, null, null 

가 나는 T-SQL 쿼리로 필요하고, :

Sally 
    Car 1 
    Wheel 1 
    Wheel 2 
    Car 2 
    Wheel 3 
    Car 3 
    <no related wheels> 

Bob 
    <no related cars> 

내가 원하는 Wheel.Position 열으로 PersonName, CarName을 반환해야하는 쿼리는 결과가되게합니다 동적 SQL을 선호하지 않습니다.

나는
select p.PersonName, c.CarName, w.Position 
from Person p 
left join Car c on c.PersonID = p.PersonID 
left join Wheel w on w.CarID = c.CarID 

을 시도하지만 여분의 결과를 얻을로이 작동하지 않습니다 Saly, Car3, null합니다. left outer을 사용하면 같은 문제가 발생합니다. 질문에 추가 된 추가 정보를 바탕으로

+2

및 샘플을 데이터는 무엇입니까? 그리고 시도한 쿼리는 어디에 있습니까? 테이블 이름은 무엇입니까? 열 이름은 무엇입니까? * 몇 가지 사실에 대해 어떻게 생각하세요? * –

답변

0
SELECT p.name, c.id, w.id 
    FROM person p, car c, wheel w 
WHERE p.id = c.id_person 
    AND c.id *= w.id_car 

     SELECT p.name, c.id, w.id 
      FROM person p, car c 
LEFT OUTER JOIN wheel w ON c.id = w.id_car 
      WHERE p.id = c.id_person 

쿼리는 다음과 같습니다

  SELECT p.id, cw.id_car, cw.id_wheel 
      FROM person p 
LEFT OUTER JOIN (SELECT c.id as id_car, c.id_person, w.id as id_wheel 
        FROM car c, wheel w 
        WHERE c.id = w.id_car) cw 
      ON p.id = cw.id_person; 
+0

은 T-SQL입니다. 네가 무슨 말하는지 모르겠다. –

+0

괜찮 았지만 SQL을 추가하겠습니다. 추가했습니다. –

0

그냥 함께이 같은 세 개의 테이블을 조인 왼쪽 :

SELECT 
    t1.PersonName, 
    t1.CarID, 
    t2.WheelID 
FROM People t1 
LEFT JOIN Cars t2 
    ON t1.CarID = t2.ID 
LEFT JOIN Wheels t3 
    ON t2.WheelID = t3.ID; 
+0

그냥 잘못되었습니다. 그것은 외부 조인이어야하며 이것은 단일 외발 자전거를 소유 한 사람들에게만 적용됩니다. –

+0

@AbdulAhad 왼쪽 조인과 왼쪽 외부 조인은 AFAIK와 같습니다. 그리고 나의 쿼리는 우리가 가지고있는 제한된 정보를 감안할 때 합리적인 추측입니다. –

+0

은 빼기. 그것은 틀렸어. 외래 키 관계는 거꾸로되어 있고 두 조인 모두 외측 조인이 될 수 없다. –