2012-02-27 10 views
2

나는 다음과 같은 쿼리 작업이 있습니다하위 쿼리

SELECT DISTINCT table1.field1, table1.field2 
FROM table1 
WHERE table1.field3 IN (1,2,3) 

결과 :

field1 field2 
Data1 60 
Data2 61 
Data3 62 

그리고 다음 쿼리는 나에게 그것은과 동일한 결과를 제공해야 첫 번째 행을 제공합니다 첫 번째 쿼리.

SELECT DISTINCT table1.field1, table1.field2 
FROM table1 
WHERE table1.field3 IN (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100) 

결과는 : 나는 subquery (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100)을 실행하면

field1 field2 
Data1 60 

, 결과는 정확히 첫 번째 쿼리와 같은 "1,2,3"입니다.

내가 무엇이 누락 되었습니까?

+1

샘플 데이터를 게시 할 수 있습니까? – Taryn

+0

, 귀하의 게시물에 복사 결과를 붙여 넣기,'descr '테이블 복사하십시오. 데이터를 게시 할 때 select 절에 field3을 포함하십시오. – danihp

+0

하위 쿼리가 세 개의 개별 행 또는 sngle 문자열'1,2,3'을 반환합니까? – Mchl

답변

9

값이 '1,2,3' 인 문자열은 3 개의 정수가 아닌 문자열입니다. 그것은 하나의 문자열입니다.

당신이 x IN (SELECT y FROM z)은 다음 하위 쿼리는 값 1, 23으로, 세 가지 항목을 반환해야합니다, x IN (1,2,3)과 같은 방식으로 행동하십시오.


문자열을 여러 정수로 구성된 레코드 집합을 반환 웹 분할() 기능이 있습니다. 그리고 그 문제를 해결할 수 있습니다.

그러나 여러 값을 가진 단일 필드가있는 단일 레코드가 있다는 사실은 더 심각한 문제의 징조입니다. 관계형 데이터베이스에 여러 값을 단일 문자열로 저장하면 안됩니다. 대신 여러 레코드 또는 여러 필드를 저장하십시오.

+0

당신이 정말로 옳습니다. 고맙습니다. – Tenza