2016-06-04 2 views
0

의 집합의 각각의 우리가 열 C1, C2, C3와 테이블이 있다고 가정 해 봅시다있다 ... 열 (C2)에 대한[SQL] : 행의 고유 한 집합 열 값이 값

, 내가 관심 특정 값 k1, k2, ..., kn에서.

각 행의 값이 c1과 같고 부분 집합에서 c2 값 목록을 가져 오는 경우 그 목록에는 모든 값 k1, k2, ..., kn이 있어야합니다.

내가 정말로 원하는 것은 각 하위 집합의 c1 값 목록입니다.

[편집 : 아래의 첫 번째 의견에 대한 응답 :] 기본 예제를 제공하기 위해 사용자 1이 열이고 기술이 2 인 테이블이 있다고 가정 해 보겠습니다.이 표에는 약 15 가지 기술이 가능합니다. 3 가지 특정 기술을 모두 갖춘 모든 사용자의 사용자 ID를 얻으려고합니다. [sql, php, js]

SQL에서이 코드를 어떻게 가져 오나요?

+1

일부 ** 실제 ** 샘플 데이터를 추가하고 "c1"또는 "k1"과 같은 것을 사용하여 질문을 난독 처리하지 마십시오. 또한 어떤 DBMS를 사용하고 있습니까? (Postgres? Oracle?) –

+0

예제를 추가했습니다. 난 모호하게하려하지는 않았지만 질문을 일반화하기 위해 노력했다. 이것은 mssql 데이터베이스입니다. 나는 PHP (sqlsrv와 함께)를 사용하고있다. –

답변

1

관계 분할을 설명했습니다. 테이블
S(col)={ k1, k2, ..., kn} - - 세트 값, 디바이더를 포함

https://en.wikipedia.org/wiki/Relational_algebraR(c1 PRIMARY KEY, c2, c3) 보자. 두 가지 일반적인 방법은 존재하지 않습니다 - 나머지 부분과 COUNT() - 정확한 나눗셈이있는 부분.

SELECT DISTINCT c1 
FROM R r1 
WHERE NOT EXISTS 
     (SELECT * 
     FROM S 
     WHERE NOT EXISTS 
       (SELECT * 
       FROM R AS r2 
       WHERE (r1.c1 = r2.c1) 
        AND (r2.c2 = S.col))); 

SELECT r1.c1 
FROM R AS r1, 
JOIN S AS s1 ON r1.c2 = s1.col 
GROUP BY r1.c1 
HAVING COUNT(r1.c2) = (SELECT COUNT(s2.col) FROM S s2); 

더 방법에 대한 https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/를 참조하십시오.

+0

아, 그래서 이것은 대수의 특정 분기를 필요로하는 중요한 문제입니다. 답변을 제공해 주셔서 감사 드리고 저에게 더 많은 참고 자료를 제공해 주셔서 감사합니다! –