반응형
ON 키워드 없이 INNER JOIN이 가능한가요?
일부 Oracle 코드로 디버깅하는 동안 다음과 같은 질문을 받았습니다.
SELECT TPM_TASK.TASKID FROM TPM_GROUP
INNER JOIN TPM_USERGROUPS ON TPM_GROUP.GROUPID = TPM_USERGROUPS.GROUPID
INNER JOIN TPM_TASK
INNER JOIN TPM_GROUPTASKS ON TPM_TASK.TASKID = TPM_GROUPTASKS.TASKID
INNER JOIN TPM_PROJECTVERSION ON TPM_TASK.PROJECTID = TPM_PROJECTVERSION.PROJECTID AND TPM_TASK.VERSIONID = TPM_PROJECTVERSION.VERSIONID
INNER JOIN TPM_TASKSTAGE ON TPM_TASK.STAGEID = TPM_TASKSTAGE.STAGEID
INNER JOIN TPM_PROJECTSTAGE ON TPM_PROJECTVERSION.STAGEID = TPM_PROJECTSTAGE.STAGEID
ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID
나는 그 대사에 혼란스러워요.
INNER JOIN TPM_TASK
본 적이 없습니다.JOIN
무턱내지 않고ON
전절또한 혼란스러운 것은 다음과 같습니다.
ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID
이것은 무작위인 것 같습니다.ON
일치하지 않는 절JOIN
쿼리는 오류 없이 실행되고 많은 데이터를 반환하므로 구문이 완벽하게 유효합니다.여기서 무슨 일이 일어나고 있는지 누가 좀 밝혀줄 수 있나요?
작은 우주...나는 어제 이 구문을 생성하는 도구를 우연히 발견했고 다소 당황했습니다.
보아하니,
FROM a
INNER JOIN b
INNER JOIN c ON (b.id = c.id)
ON (a.id = c.id)
중첩된 하위 쿼리와 같습니다.
FROM a
INNER JOIN (SELECT <<list of columns>>
FROM b
INNER JOIN c ON (b.id=c.id)) c
ON (a.id = c.id)
저는 이것이 단지 당신의 질문을 주문하는 것의 문제라고 생각합니다.INNER JOIN
s, 그들의 순서는 실제로 그렇게 중요하지 않습니다).쿼리를 재정렬했는데 다음과 같이 표시됩니다.
SELECT TPM_TASK.TASKID
FROM TPM_GROUP
INNER JOIN TPM_USERGROUPS
ON TPM_GROUP.GROUPID = TPM_USERGROUPS.GROUPID
INNER JOIN TPM_GROUPTASKS
ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID
INNER JOIN TPM_TASK
ON TPM_TASK.TASKID = TPM_GROUPTASKS.TASKID
INNER JOIN TPM_PROJECTVERSION
ON TPM_TASK.PROJECTID = TPM_PROJECTVERSION.PROJECTID
AND TPM_TASK.VERSIONID = TPM_PROJECTVERSION.VERSIONID
INNER JOIN TPM_TASKSTAGE
ON TPM_TASK.STAGEID = TPM_TASKSTAGE.STAGEID
INNER JOIN TPM_PROJECTSTAGE
ON TPM_PROJECTVERSION.STAGEID = TPM_PROJECTSTAGE.STAGEID
지금 그게 더 말이 됩니까? 저한테는 그래요.
안에 괄호가 있으면 괜찮을 것 같아요
SELECT TPM_TASK.TASKID
FROM
TPM_GROUP
INNER JOIN TPM_USERGROUPS ON TPM_GROUP.GROUPID = TPM_USERGROUPS.GROUPID
INNER JOIN (
TPM_TASK
INNER JOIN TPM_GROUPTASKS ON TPM_TASK.TASKID = TPM_GROUPTASKS.TASKID
INNER JOIN TPM_PROJECTVERSION ON TPM_TASK.PROJECTID = TPM_PROJECTVERSION.PROJECTID
AND TPM_TASK.VERSIONID = TPM_PROJECTVERSION.VERSIONID
INNER JOIN TPM_TASKSTAGE ON TPM_TASK.STAGEID = TPM_TASKSTAGE.STAGEID
INNER JOIN TPM_PROJECTSTAGE ON TPM_PROJECTVERSION.STAGEID = TPM_PROJECTSTAGE.STAGEID
) ON TPM_GROUP.GROUPID = TPM_GROUPTASKS.GROUPID
그러나 그들은 모두 내면의 결합이기 때문에 저는 라막의 대답에 동의합니다.
언급URL : https://stackoverflow.com/questions/10856016/can-you-have-an-inner-join-without-the-on-keyword
반응형
'programing' 카테고리의 다른 글
재사용 가능하고 동적인 탭 메뉴를 생성하는 데 사용하는 v-for 내부 구성 요소 사용 (0) | 2023.07.11 |
---|---|
jQuery 클래스 이름 변경 (0) | 2023.07.11 |
각도2:잡히지 않음(약속):구성 요소에서 평가!에 대한 견적이 지원되지 않습니다. (0) | 2023.07.11 |
복합 기본 키 참조 (0) | 2023.07.11 |
Oracle이 여기에 숨겨진 열을 추가하는 이유는 무엇입니까? (0) | 2023.07.06 |