program tip

MySQL LEFT JOIN 3 테이블

radiobox 2020. 12. 11. 08:00
반응형

MySQL LEFT JOIN 3 테이블


3 개의 테이블이 있습니다.

사람 (PersonID, 이름, SS)
두려움 (FearID, Fear)
Person_Fear (ID, PersonID, FearID)

이제 나는 그들과 관련된 두려움을 가진 모든 사람을 나열하고 싶습니다 (여러 두려움이 될 수 있지만 없을 수도 있습니다). 사람 테이블은 사람과 관련된 두려움이없는 경우에도 표시되어야합니다.

LEFT JOIN이 필요하다고 생각하지만 코드가 작동하지 않는 것 같습니다.

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 

내가 여기서 뭘 잘못하고 있니?


당신은 가입하려고 Person_Fear.PersonIDPerson_Fear.FearID- 이것은 정말 이해가되지 않습니다. 아마도 다음과 같은 것을 원할 것입니다.

SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear
    INNER JOIN Fears
    ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID

이것은 중간 테이블 PersonsFears통해 결합 Person_Fear됩니다. (가) 사이에 결합하기 때문에 Persons하고 Person_Fear있는 LEFT JOIN, 당신은 모든 얻을 것이다 Persons기록.

또는 :

SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear ON Person_Fear.PersonID = Persons.PersonID
LEFT JOIN Fears ON Person_Fear.FearID = Fears.FearID

이 시도

    SELECT p.Name, p.SS, f.Fear 
    FROM Persons p 
    LEFT JOIN Person_Fear fp 
    ON p.PersonID = fp.PersonID
    LEFT JOIN Fear f
    ON f.FearID = fp.FearID

이 작업을 확실히 시도하십시오.

SELECT p.PersonID AS person_id,
   p.Name, p.SS, 
   f.FearID AS fear_id,
   f.Fear 
   FROM person_fear AS pf 
      LEFT JOIN persons AS p ON pf.PersonID = p.PersonID 
      LEFT JOIN fears AS f ON pf.PersonID = f.FearID 
   WHERE f.FearID = pf.FearID AND p.PersonID = pf.PersonID

Select 
    p.Name,
    p.SS,
    f.fear
From
    Persons p
left join
        Person_Fear pf
    inner join
        Fears f
    on
        pf.fearID = f.fearID
 on
    p.personID = pf.PersonID

Select Persons.Name, Persons.SS, Fears.Fear
From Persons
LEFT JOIN Persons_Fear
ON Persons.PersonID = Person_Fear.PersonID
LEFT JOIN Fears
ON Person_Fear.FearID = Fears.FearID;

참고URL : https://stackoverflow.com/questions/16222097/mysql-left-join-3-tables

반응형