2012-01-11 12 views
2

나는 다음과 같은 정의와 테이블 FOO이 (ID, 유형)과 내가 함께 (그 쌍에 해당하는 모든 데이터를 얻으려면 이드와 타입 그래서 나는 무엇에 속하는지 안다.) 하나의 쿼리에서이 작업을 수행 할 수 있습니까? (내 특정 SQL 언어는 SQLite이다.)SQL의 쌍 목록에있는 행을 선택하는 방법이 있습니까?</p> <pre><code> id INTEGER, type INTEGER, data VARCHAR(32), PRIMARY KEY(id, type) </code></pre> <p>내가 쌍의 목록 제공하고있다 :

+0

표준 SQL에는 하나의 데이터 구조 : 행 테이블이 있습니다. 나는 SQLite doesn '쌍'또는 '목록'에 대한 데이터 구조를 가지고 있다고 가정합니다. 표, 행, 열, 스칼라 매개 변수 등으로 요구 사항을 명확히하십시오. 감사합니다. – onedaywhen

답변

2

SQLite에서 이것을 수행하는 유일한 방법은 where 절에 or 문장을 사용하는 것이다. 또는, 당신은이 작업을 수행 할 수 있습니다 함양을 위해

select 
    f1.* 
from 
    foo f1 
    inner join (
     select 'id1' as id, 'type1' as type union all 
     select 'id2', 'type2' union all 
     select 'id3', 'type3' 
    ) f2 on 
     f1.id = f2.id 
     and f1.type = f2.type 

에서, where 절 접근 방식은 다음과 같습니다 당신이 많은 쌍을 경우

select 
    * 
from 
    foo 
where 
    (id = 'id1' and type = 'type1') 
    or (id = 'id2' and type = 'type2') 
    or (id = 'id3' and type = 'type3') 
+0

어디서 접근 속도가 빨라지겠습니까? – chacham15

+0

@ chacham15 - 반드시 그런 것은 아닙니다. '또는'는 정말 성능을 망칠 수 있습니다. '내부 조인 (inner join) '은 해쉬 테이블을 생성하고 술어리스트를 거치지 않고 테이블에 빠르게 결합합니다. 즉, 둘 다 시도하고 어느 것이 더 빠르는지 확인하십시오. 나는 SQL Server에서 일하며 Where 절의 '또는'부분은 죽음의 무릎이다. – Eric

0

은 또한 쌍을 들고 두 번째 테이블을 가질 수있다.

select 
    foo.* 
from 
    foo 
    inner join pairs 
     on foo.id = pairs.id and foo.type = pairs.type 
관련 문제