복붙노트

[SQL] 다중으로 선택하기 WHERE 동일한 열에 조건

SQL

다중으로 선택하기 WHERE 동일한 열에 조건

좋아, 내가 여기서 뭔가 분명 / 간단하게 보이는 것 같아요 ...하지만 난 쿼리를 작성해야 만 반환 동일한 열에서 여러 조건과 일치하는 기록 ...

내 테이블은 사용자에게 플래그를 적용하기위한 아주 간단한 연결 설정은 ...

ID   contactid  flag        flag_type 
-----------------------------------
118  99         Volunteer   1 
119  99         Uploaded    2 
120  100        Via Import  3 
121  100        Volunteer   1  
122  100        Uploaded    2

등등 ...이 경우에는 99과 100은 모두 "자원 봉사"와 "업로드"로 플래그가 모두 접촉을 볼 수 있습니다 ...

내가 무엇을 할 수 있어야하는 것은 그 contactId의 ...을 contactId의의의 내 머리처럼 보일한다 SQL에 ... 선택한 모든 플래그를 일치 할 필요가 일치하는 여러 기준이 검색 양식을 사용하여 입력 한 해당의 반환입니다 :

SELECT contactid 
 WHERE flag = 'Volunteer' 
   AND flag = 'Uploaded'...

하지만 ... 아무것도 반환 것을 ... 어떻게 내가 여기 잘못 한거야?

해결법

  1. ==============================

    1.당신은 하나 GROUP BY 및 HAVING COUNT를 사용할 수있다 (*) = _ :

    당신은 하나 GROUP BY 및 HAVING COUNT를 사용할 수있다 (*) = _ :

    SELECT contact_id
    FROM your_table
    WHERE flag IN ('Volunteer', 'Uploaded', ...)
    GROUP BY contact_id
    HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list
    

    (가정 contact_id이 플래그는 고유).

    또는 사용 조인

    SELECT T1.contact_id
    FROM your_table T1
    JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
    -- // more joins if necessary
    WHERE T1.flag = 'Volunteer'
    

    플래그의 목록이 매우 길고 경기가 많이있을 경우 첫 번째 아마도 빠릅니다. 플래그의 목록이 짧고 몇 경기가있는 경우, 당신은 아마 두 번째는 빠르게 찾을 수 있습니다. 성능은 가장 적합한 확인하기 위해 데이터를 모두 테스트 우려의 시도 인 경우.

  2. ==============================

    2.사용하다:

    사용하다:

      SELECT t.contactid
        FROM YOUR_TABLE t
       WHERE flag IN ('Volunteer', 'Uploaded')
    GROUP BY t.contactid
      HAVING COUNT(DISTINCT t.flag) = 2
    

    중요한 것은 t.flag의 계산이 IN 절에서 인수의 수와 같아야 할 필요가 있다는 것입니다.

    COUNT (DISTINCT t.flag)의 사용은 contactId의 플래그의 조합에 고유 제한 조건이없는 경우입니다 - 중복의 기회가 존재하지 않는 경우는 쿼리에서 DISTINCT를 생략 할 수 있습니다 :

      SELECT t.contactid
        FROM YOUR_TABLE t
       WHERE flag IN ('Volunteer', 'Uploaded')
    GROUP BY t.contactid
      HAVING COUNT(t.flag) = 2
    
  3. ==============================

    3.이 같은 INTERSECT를 사용하는 것이 좋습니다 :

    이 같은 INTERSECT를 사용하는 것이 좋습니다 :

    SELECT contactid WHERE flag = 'Volunteer' 
    INTERSECT
    SELECT contactid WHERE flag = 'Uploaded'
    

    나는 그것이 가장 물류 솔루션 생각합니다.

  4. ==============================

    4.정말 테이블을 볼 수 있지만, 플래그는 모두 '자원 봉사'와 '업로드'가 될 수 없습니다. 당신이 열에서 여러 개의 값이있는 경우 사용할 수 있습니다

    정말 테이블을 볼 수 있지만, 플래그는 모두 '자원 봉사'와 '업로드'가 될 수 없습니다. 당신이 열에서 여러 개의 값이있는 경우 사용할 수 있습니다

    WHERE flag LIKE "%Volunteer%" AND flag LIKE "%UPLOADED%"
    

    실제로 적용 할 수없는 포맷 된 테이블을보고.

  5. ==============================

    5.이 대체 쿼리를 사용하는 것을 시도하십시오 :

    이 대체 쿼리를 사용하는 것을 시도하십시오 :

    SELECT A.CONTACTID 
    FROM (SELECT CONTACTID FROM TESTTBL WHERE FLAG = 'VOLUNTEER')A , 
    (SELECT CONTACTID FROM TESTTBL WHERE FLAG = 'UPLOADED') B WHERE A.CONTACTID = B.CONTACTID;
    
  6. ==============================

    6.

    SELECT contactid, Count(*) 
    FROM <YOUR_TABLE> WHERE flag in ('Volunteer','Uploaded')  
    GROUP BY contactid 
    HAVING count(*)>1;
    
  7. ==============================

    7.변경 및하거나. 간단한 실수. 일반 영어처럼 생각, 나는이 또는 동일에 아무것도 선택합니다.

    변경 및하거나. 간단한 실수. 일반 영어처럼 생각, 나는이 또는 동일에 아무것도 선택합니다.

  8. ==============================

    8.이 옵션을 사용합니다 : 예를 들면 :

    이 옵션을 사용합니다 : 예를 들면 :

    select * from ACCOUNTS_DETAILS
    where ACCOUNT_ID=1001
    union
    select * from ACCOUNTS_DETAILS
    where ACCOUNT_ID=1002
    
  9. ==============================

    9.당신에게 자원 봉사와 업로드 모두 당신의 열의에 존재하는 경우에만 응답을 반환합니다. 그렇지 않으면 null 값을 반환합니다 ...

    당신에게 자원 봉사와 업로드 모두 당신의 열의에 존재하는 경우에만 응답을 반환합니다. 그렇지 않으면 null 값을 반환합니다 ...

    사용하거나 문에 시도 ...

    SELECT contactid  WHERE flag = 'Volunteer' OR flag = 'Uploaded'
    
  10. ==============================

    10.

    select purpose.pname,company.cname
    from purpose
    Inner Join company
    on purpose.id=company.id
    where pname='Fever' and cname='ABC' in (
      select mname
      from medication
      where mname like 'A%'
      order by mname
    ); 
    
  11. ==============================

    11.코드 :

    코드 :

    SELECT contactid 
    WHERE flag = 'Volunteer' AND flag = 'Uploaded' [...]
    

    당신이 테이블 이름을 선언하지 않았다 위해 작동하지 않습니다. 실행은 오류 메시지를 반환합니다.

    당신은 두 검색 쿼리를 표시 할 경우, 코드는 다음과 같이 보일 것입니다.

    SELECT * FROM (your_table_name) WHERE flag = 'Volunteer' OR flag = 'Uploaded';
    

    하지 이런 식으로는 항상 false를 반환하기 때문에     (your_table_name) WHERE 플래그 = '자원'AND 플래그 = '업로드'FROM SELECT *;

    당신은이 작업을 수행 할 수 있습니다

    SELECT * FROM (your_table_name) 
    WHERE flag = 'Volunteer' OR flag = 'Uploaded' 
    ORDER BY contactid, flag asc; 
    

    (당신이 내림차순으로 디스플레이를 원하는 경우 오름차순에 대한 오름차순, 당신은 또한 내림차순으로 변경할 수 있습니다)

  12. ==============================

    12.때때로 당신은 나무의 나무를 볼 수 없습니다 :)

    때때로 당신은 나무의 나무를 볼 수 없습니다 :)

    원래 SQL ..

    SELECT contactid 
     WHERE flag = 'Volunteer' 
       AND flag = 'Uploaded'...
    

    해야한다:

    SELECT contactid 
     WHERE flag = 'Volunteer' 
       OR flag = 'Uploaded'...
    
  13. from https://stackoverflow.com/questions/4047484/selecting-with-multiple-where-conditions-on-same-column by cc-by-sa and MIT license