복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.이 시도

    이 시도

        select personID from T1
        group by personID
        having count(distinct stuffID) >= (select count(*) from t2)
    
  6. 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