2013-01-04 2 views
1

다른 사람의 코드와 어려움을 겪고 있습니다. WHERE 절은 다음 (MySQL) 문에서 무엇을 할 수 있습니까?WHERE 절에서 "IN"을 "="와 결합했습니다.

SELECT * FROM t1, t2 WHERE t1.id = t2.id IN (1,2,3) 

제 경우에는 원하는 결과를 제공하지 않지만 원래 작성자가 의도 한 바를 파악하려고합니다. 누구나 이런 식으로 WHERE 절을 사용할 수 있습니까?

+1

나는이 구문은 SQL Server 2000에서 지원 잘못 아니에요 경우, 사용하는,하지만 난 그게 버그 경우 말하고 싶지만하지 나중에 – Habib

+0

무엇 DB : 여기 ANSI의 SQL에서 쿼리의 것과 동일합니다 이 구문은 실제로 허용됩니다 –

답변

4

이 조건은 오른쪽에서 시작하여 t2.id IN (1,2,3)을 평가하고 결과 (0 또는 1)를 가져오고 t1.id과 결합에 사용합니다. t2의 모든 행은 IN 목록의 idt1의 행에 연결되며 id이 1입니다. t2의 다른 모든 행은 id이 0 인 t1의 행과 조인됩니다. sqlfiddle.com의 작은 데모는 link입니다.

그것이 저자의 의도라고 상상하기 어렵습니다. 두 항목이 모두 목록에 있고 서로 동일하다고 생각할 가능성이 더 많습니다. 저자가 두 테이블에 참여하기를 원했기 때문에 서로의 평등이 중요합니다.

조인을 수행하는보다 현대적인 방법은 ANSI SQL 구문을 사용하는 것입니다.

SELECT * FROM t1 JOIN t2 ON t1.id = t2.id IN (1,2,3) 
+0

해당 페이지에서 http://dev.mysql.com/doc/refman/5.5/en/operator-precedence.html 연관성에 대한 단어가 하나도 없다는 사실은 흥미 롭습니다 (나와 +1) – zerkms

+0

저는 그것이 다른 방법이라고 생각합니다. IN이 먼저 평가되고 나서 결과가 결합에 사용됩니다. http://sqlfiddle.com/#!2/6f2f5/1 – AndreKR

+0

@AndreKR을보세요. 당신이 옳다고 생각합니다. 'IN'이'='보다 높은 우선 순위를 갖는 것처럼 보입니다. 왜 내가 왼쪽에서 오른쪽으로 가고 있다고 생각하는지 모르겠다. 나는 이것을 고려하여 답을 다시 썼다. 고마워요! – dasblinkenlight

관련 문제