2012-01-10 3 views
2

내가 SQL에서 확인하실 수 있습니다 어떻게 값 2,3,6배열이 쿼리의 하위 집합을 평가하는지 여부를 확인 하시겠습니까?

와 배열 I 행

사용자 WHERE에서

SELECT ID ...

1 
2 
6 
8 
9 

의 집합을했습니다 나는했습니다과 배열은 쿼리 결과의 하위 집합입니까?

+0

가능 [집합이있는 모든 행 SQL 선택] (http://stackoverflow.com/questions/8425232/sql-select-all-rows-where-subset-exists) – onedaywhen

답변

2

SQL은 배열을 지원하지 않으므로 완전히 확신하지 못합니다. 어떻게 숫자 배열을 저장하고 있는데이 질문에 대답하는 가장 좋은 방법에 영향을 미칩니다. 말했다

, 나는이 작업을 수행 할 것 :

기본 쿼리
SELECT u.id 
FROM Users U 
    RIGHT JOIN Numbers N 
     ON U.id=N.Number 
WHERE N.Number IN (2,3,6) 

; 정확한 세부 정보는 오류를 감지하기 위해 수행 할 작업에 따라 달라집니다. u.ID가 NULL 인 모든 레코드는 하위 집합이 아님을 나타냅니다. 당신이 실제로 즉시 ID의 설정을하지 않을 경우 당신은> 0되었다 때마다 당신은 당신이 하위 집합이 없었 알 것

SELECT COUNT(*) AS Missing 
FROM Users U 
    RIGHT JOIN Numbers N 
     ON U.id=N.Number 
WHERE N.Number IN (2,3,6) 
AND u.id IS NULL 

하고, 그것을 수정할 수 있습니다. (SQL Server에서 적어도 int를 약간 캐스팅하여 0 = false,! 0 = true로 설정하면 응용 프로그램을보다 쉽게 ​​사용할 수 있습니다.)

기타 자세한 내용은 당신은 실제로하려고 노력하고 있습니다. 그러나 희망적으로 그것은 기본적인 기술로서 의미가 있습니다.

(NB이 모두는 당신이 당신의 데이터베이스에서 숫자/집계 테이블을 가지고 있다고 가정합니다. 당신이 이미하지 않은 경우 그들은 내가 하나가 설정 얻을 것, 그래서 매우 유용하다.)

1

사용 Dynamic SQL는 :

당신은 개별적으로 각 레코드/항목을 확인해야
declare @cmd varchar(200) 
select @cmd = "select id from Users WHERE id in (" + @array + ")" 

exec(@cmd) 
+0

아니,'IN' 절, 쿼리의 중복 다른 방법으로, 선택된 ID를 배열 한도에서 만드는 것입니다. –

+0

2,3,6가 모두 테이블에 있는지 확인하고 싶습니까? 아니면 그들은 그 순서대로 존재 하는가? 정확히 무엇? –

+0

이 목록이 최종 하위 집합인지 확인하려면 배열의 요소 수를 계산하고이 연산의 반환 세트 길이와 비교해야합니다. – eftpotrm

2

, 다음을 계산합니다.

JOIN이 배열과 동일한 크기이면 배열은 테이블의 하위 집합입니다. 당신은 당신이 할 수에 대해 테스트하는 데 필요한 값을 가진 하나 개의 컬럼 테이블을 채울 수 있다면 여기

SELECT 
    COUNT(*) 
FROM 
    Users 
INNER JOIN 
    search 
    ON search.id = Users.id 
HAVING 
    COUNT(*) = (SELECT COUNT(*) FROM search) 
1

... 테이블에서 당신의 배열을 가정 한 예이다.

Select count(*) 
From 
    (
     Select id 
     From users 
     Intersect 
     Select id 
     From testValues 
    ) test 

카운트가 테스트 할 값의 수와 같으면 배열이 부분 집합을 형성합니다.

+0

물론 이것은 여러분이 intersect로 SQL 변형을 사용하고 있다고 가정합니다. Dems의 솔루션은 모든 곳에서 작동해야합니다. –

관련 문제