ID를 사용하여 여러 SQL 테이블을 조인하는 방법은 무엇입니까?


141

가입하려는 4 가지 테이블이 있습니다. 테이블은 다음과 같이 열로 구성됩니다.

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

b에는 해당 테이블에 대한 기본 키가 있으므로 테이블 A부터 b를 사용하여 테이블 a와 c에 참여하는 방법을 이해합니다. 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())) 

답변:


303

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

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. 이전과 마찬가지로 다른 조인을 수행하기 만하면됩니다.

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


2
tableN을 선택하지 않습니다. * 열 레이블에서 일치하는 모든 기본 키 ID를 복제합니까? (질문은 어떤 출력이 바람직한 지 지정하지 않았지만 일반적으로 이것을하고 싶지는 않습니다.)
Heather Stark

6
(가) 왜 요청할 수도 JOINTableC있습니다 ON TableC.cID = TableB.cID하지 TableC.cID = TableA.cID. TableA다른 3 개의 테이블에 합류한다고 가정했습니다 .
emihir0

25
SELECT 
    a.nameA, /* TableA.nameA */
    d.nameD /* TableD.nameD */
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE()

4

TableD에 가입하지 않았 dID으며 테이블 중 하나에서 TableD FIELD ( ) 만 선택했습니다 .


2

간단한 내부 조인 뷰 코드 ....

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;

OP의 테이블 구조를 사용하지 않습니까?!
Istiaque Ahmed 17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.