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

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 열에서 두 번째 도메인 이름을 어떻게 표시합니까?



답변

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

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의 별칭 지정에 대한 자세한 내용은 여기를 참조하십시오 .


답변

다음 표를 감안할 때 ..

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 번 테이블

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


답변