[SQL] 열이 다른 컬럼의 모든 값이 포함되어 있는지 확인 - MySQL의를
SQL열이 다른 컬럼의 모든 값이 포함되어 있는지 확인 - MySQL의를
하자 내가 다음으로, 사람의 ID 및 기타 물건의 ID가 테이블 T1이 있다고 가정
Table: T1
personID | stuffID
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 4
3 | 1
3 | 2
그리고 stuffIDs의 한 열이 다른 테이블 T2
Table: T2
stuffID
1
2
3
내가 얻을 것이라는 결과는 SELECT에 의해, T2의 ALL을 stuffIDs 연결되어 peopleIDs의 테이블입니다.
예 다음의 결과가 단지 ID 한 것 (이것은 연관된 모든 stuffIDs T2.stuffID가 포함 되더라도 personID 3에는 나타나지한다).
해결법
-
==============================
1.내가 제대로 이해한다면, 당신은 모든 personID의 T1의 모든 T2에서 stuffID의 FOUND를 연결 한 것을 검색 할.
내가 제대로 이해한다면, 당신은 모든 personID의 T1의 모든 T2에서 stuffID의 FOUND를 연결 한 것을 검색 할.
다음과 같이이 문제를 분리 할 수 있습니다 : 우선, 모든 T1 항목을 찾아 그 중첩 된 쿼리와 일치
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2)
이제 stuffID 당신이 원하는의 모든 포함 세트의 항목 중 어느 것이 확인해야
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
모두 함께 넣어 :
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
HTH.
-
==============================
2.
select personID from T1 where stuffID in (select stuffID from t2) group by personID having count(distinct stuffID) = (select count(*) from t2)
즉이 T2에있는 사람의 stuffids를 선택, (별개의)을 계산하고, T2에서와 같은 번호를 확인합니다.
-
==============================
3.
select personID from T1 group by personID having count(distinct stuffID) in (select count(distinct stuffID) from T2)
T2에서 수 (별개의 stuffID)를 선택 <- 별개의 countIDs의 총 수를 줄 것인가
카운트 (별개 stuffID)를 갖는 personID 그룹화 <- personId 의해 그룹화 personId가 갖는 stuffIds의 수를 카운트 한 후.
두 그래서 카운트는 원하는 결과를 얻을 동일해야합니다.
-
==============================
4.수를 사용하면 효과적인 방법입니다. 또한, 집합 이론의 미래에서,이 방법으로 그것에 대해 생각 할 수 있습니다 유효한 personID, 우리는 T2의 stuffID을 찾을 수 없어야하지만, T1이 personID에 연결되지 않습니다. 따라서 우리는 다음과 같이 그것을 할 수 있습니다 :
수를 사용하면 효과적인 방법입니다. 또한, 집합 이론의 미래에서,이 방법으로 그것에 대해 생각 할 수 있습니다 유효한 personID, 우리는 T2의 stuffID을 찾을 수 없어야하지만, T1이 personID에 연결되지 않습니다. 따라서 우리는 다음과 같이 그것을 할 수 있습니다 :
SELECT DISTINCT T1.personID FROM T1 WHERE NOT EXISTS ( SELECT T2.stuffID FROM T2 WHERE T2.stuffID NOT IN ( SELECT DISTINCT T1copy.stuffID FROM T1 T1copy WHERE T1copy.personID=T1.personID));
-
==============================
5.이 시도
이 시도
select personID from T1 group by personID having count(distinct stuffID) >= (select count(*) from t2)
from https://stackoverflow.com/questions/28939367/check-if-a-column-contains-all-the-values-of-another-column-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] GETDATE 지난 달 (0) | 2020.07.14 |
---|---|
[SQL] 1 개 이상의 값을 가진 열을 PIVOT 행이 반환 (0) | 2020.07.14 |
[SQL] SQLite는 조건부 갱신 (0) | 2020.07.14 |
[SQL] 어떻게 SQL을 사용하여 파일에 SQL 서버에서 이미지를 저장하려면 [종료] (0) | 2020.07.14 |
[SQL] 임시 테이블의 범위? (0) | 2020.07.14 |