2016-12-27 1 views
0

존재하는 경우 (true 또는 false) 단 하나 대신 id 목록을 반환하는 단일 쿼리를 수행하려고합니다.ID 목록이 있는지 확인하는 방법

일반적인 쿼리가 다음

select exist(select 1 from one_table where id_table = 'some_value') 

처럼 존재하며 여러 개의 값을 확인하는 쿼리를하고 싶습니다. 그것은 다음과 같을 것입니다

select exist(select 1 from one_table 
      where id_table in('some_value_1', '...')) 

하지만 이드를 찾고있는 모든 경우에 존재합니다.

+0

그것은 id_table'은'UNIQUE' 또는 'PRIMARY KEY' 정의'여부를 선언하는 것이 중요합니다 :

또 다른 방법은 exists의 순서를 사용하는 것입니다. 테이블 정의와 Postgres 버전을 * 모든 * 질문에 추가하는 것이 가장 좋습니다. 그리고 값의 * list *, 테이블 같은 * set * 또는 * array *를 제공합니까? –

답변

2

한 방법은 count(*) 사용

select <n> = (select count(*) from one_table where id_table in ('some_value_1', '...') 

<n>는 ID의 수있을 것이다.

select (exists (select 1 from one_table where id_table = id1) and 
     exists (select 1 from one_table where id_table = id2) and 
     . . . 
     ) 
+0

그게 내가 찾고있는거야. 성능면에서 어느 것이 더 낫습니까? – Pau

+0

'one_able (id_table)'에 인덱스가 있다면 괜찮을 것입니다. 두 번째는 단락으로 인해 약간의 성능 이점이있을 수 있지만 시스템에서 실제로 시도해 볼 필요가 있습니다. –

관련 문제