mysql에서 동일한 테이블에 두 번 어떻게 조인합니까?


110

2 개의 테이블이 있습니다. 하나 (도메인)에는 도메인 ID와 도메인 이름 (dom_id, dom_url)이 있습니다.

다른 하나에는 실제 데이터가 포함되어 있으며 그 중 2 개에는 TO 및 FROM 도메인 이름이 필요합니다. 따라서 두 개의 열 rev_dom_from 및 rev_dom_for가 있으며 둘 다 도메인 테이블에서 도메인 이름 ID를 저장합니다.

단순한.

이제 실제로 웹 페이지에 두 도메인 이름을 모두 표시해야합니다. LEFT JOIN domains ON reviews.rev_dom_for = domains.dom_url 쿼리를 통해 둘 중 하나를 표시하는 방법을 알고 있습니다. 그런 다음 rev_dom_for 열의 도메인 이름을 에코하는 dom_url을 에코합니다.

그러나 dom_rev_from 열에서 두 번째 도메인 이름을 어떻게 표시합니까?

mysql 

답변:


166

다음 줄을 따라 다른 조인을 사용합니다.

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

수정 :

당신이하는 일은 테이블에 여러 번 참여하는 것입니다. 게시물의 쿼리를 살펴보십시오. Reviews 테이블 (rvw로 별칭 지정)에서 값을 선택합니다. 해당 테이블은 도메인 테이블 (FOR 및 FROM)에 대한 2 개의 참조를 제공합니다.

이 시점에서 도메인 테이블을 Reviews 테이블에 조인하는 것은 간단한 문제입니다. FOR에 대해 한 번 (toD로 별칭 지정), FROM에 대해 두 번째 (fromD로 별칭으로 지정).

그런 다음 SELECT 목록에서 DOMAIN 테이블의 LEFT JOINS 모두에서 DOM_URL 필드를 선택하고 Domains 테이블을 참조하여 조인 된 각 테이블 별칭으로 참조하고 ToURL 및 FromUrl로 별칭을 지정합니다.

SQL의 별칭 지정에 대한 자세한 내용은 여기를 참조하십시오 .


5
트릭은 SELECT에서 사용할 수 있도록 'AS to'및 'AS from'이라는 이름으로 각 JOIN을 식별했다는 것입니다.
Matthew Smith

1
테이블 이름에 비 키워드를 사용하면 명확 해집니다. 또한 별칭을 지정할 때 "as"키워드를 사용하십시오.
TheSoftwareJedi

저를 용서하십시오. 그러나 이것이 어떻게 작동해야 하는지를 여전히 이해하지 못합니다. 두 테이블은 도메인 (dom_id, dom_url) 및 리뷰 (rev_id, rev_dom_from, rev_dom_for)입니다. 누군가가 정확한 쿼리를 작성하여 요령을 알 수 있다면 좋을 것입니다. 왜냐하면 내가 무엇을 편집해야하는지 전혀 모르기 때문입니다.

1
별칭은 테이블 자체가 아니라 테이블의 행을 참조하는 것으로 생각하십시오. 유사하게 "for (i = 0; i <max; i ++)"와 같은 루프에서 변수 i는 반복 값이며 루프 자체가 아닙니다.
Bill Karwin

나는 당신이 SQL에서 이것을 할 수 있다는 것을 몰랐습니다, Gracias.
Adam F

8

다음 표를 감안할 때 ..

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

이 SQL을 사용해보십시오 ... (Stephen Wrighton이 위에서 작성한 것과 거의 동일합니다.) 트릭은 기본적으로 동일한 쿼리에서 도메인 테이블에서 두 번 선택하고 결과를 결합한다는 것입니다.

Select d1.dom_url, d2.dom_id from
review r, domain d1, domain d2
where d1.dom_id = r.rev_dom_from
and d2.dom_id = r.rev_dom_for

그래도 문제가 해결되지 않는 경우 정확히 이해하지 못하는 부분을 구체적으로 설명하십시오.


-1

이것을 읽고 시도해보십시오. 이것은 당신을 도울 것입니다 :

1 번 테이블

column11,column12,column13,column14

표 2

column21,column22,column23,column24


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21  INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22

table2asnew1 다음과 일치하는 테이블 2의 인스턴스입니다. table1.column11=table2asnew1.column21

table2asnew2 다음과 일치하는 테이블 2의 또 다른 인스턴스입니다. table1.column12=table2asnew2.column22

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.