본문 바로가기
MySql

MySQL ID를 사용하여 여러 SQL 테이블을 조인하려면 어떻게해야합니까?

by 베이스 공부 2020. 9. 15.
반응형

조인하려는 테이블이 4 개 있습니다. 테이블은 다음과 같은 열로 구성됩니다.

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

테이블 A부터 b를 사용하여 테이블 a와 c를 조인하는 방법을 이해합니다. b에는 해당 테이블에 대한 기본 키가 있기 때문입니다. TableA에서도 TableD 테이블을 조인 할 수 있기를 원합니다. 아래는 먼저 테이블 A와 B를 조인 한 다음이를 C에 조인하는 SQL 문입니다.

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now())) 

D를 포함하기 위해 다른 조인을 추가하려고하면 'TableD'를 알 수 없다는 오류가 발생합니다.

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now())) 

 

해결 방법

 

다음과 같은 것을 더 원합니다.

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now()) 

귀하의 예에서는 실제로 TableD 를 포함하지 않습니다. 이전에했던 것처럼 다른 조인을 수행하기 만하면됩니다.

참고 : 대부분의 경우에 실제로 필요하지 않기 때문에 많은 괄호를 제거했으며 코드를 읽으려고 할 때만 혼란을 더합니다. 적절한 중첩은 코드를 읽기 쉽고 분리 할 수있는 가장 좋은 방법입니다.

 

참조 페이지 https://stackoverflow.com/questions/9853586

 

 

반응형

댓글