2017-10-15 8 views
0

이 명확하게 잘못 형성된 문입니다 다음과 같은 SQL 문을이 잘못된 (아직 유효한) SQL 조인은 무엇을 의미합니까? 실제로 무엇을하고 있습니까?

select * 
from A 
    inner join B on A.FK = B.PK 
    inner join C on A.FK = B.PK 

을 고려하십시오. C의 조인은 B에 대한 조인 조건을 사용하고 있습니다. 그러나 여전히 실행됩니다. 통역관은이 상황에서 C에 어떻게 가입하기로 결정합니까? 왜 이것이 심지어 허용 된 성명서입니까? 이런 상황이 바람직한 상황이 있습니까?

+0

'올바른'데이터를 반환합니까? 필자는 개발자가 인쇄 상 오류를 범하고 결과를 다시 검증하지 않은 것처럼 보입니다. – Amit

+0

@Amit - 특정 상황에 대한 질문이 아닙니다. 내가 실제로이 작업에 대한 사본 붙여 넣기 오류를 만들었 기 때문에이 질문을 생각했습니다. 그러나 나는 SQL 문이 (오랜 시간 동안) 계속 실행되었다는 것을 알아 차리고 죽였다. 문제는 "실제로 무엇을하고 있으며, 왜 허용되고, 언제까지 바람직합니까?"입니다. –

+3

옵티마이 저는 조건을 자유롭게 다시 설정할 수 있습니다. 따라서 두 조건 (실제로 하나)이 WHERE 섹션에있는 경우와 동일합니다. "그것이 무엇을하고 있는가"에 관해서 - 데카르트 제품은 그것이하는 일입니다. –

답변

1

a에서 b까지의 조인 조건은 중복되며, word 이후의 sql 위치는 중요하지 않습니다. 나는 이것이 사실이라고 믿는다.

여기에서 a와 b의 조인 결과에 대해 견해 조인을 수행하고 있습니다. a와 b가 조인하여 15 개의 행을 생성하고 c가 20 인 경우 결과 집합은 300 개의 행입니다.