복붙노트

[SQL] SQL은 - 쿼리처럼 여러 결합

SQL

SQL은 - 쿼리처럼 여러 결합

SO에 대한 내 첫 번째 질문 이봐! 됐건 ...

여전히 상대적으로 SQL에서 newb은 내가 여기서 뭔가를 누락 될 수 있습니다 생각 때문에. 내 질문은 내가 현재 전화 번호의 전체 테이블이 있습니다. 나는 내가 가지고있는 목록과 유사 전화 번호를 검색 쿼리를 갖고 싶어. 그래서 예를 들어, 내가 '555987', '555123', '555321'로 시작하는 전화 번호를 찾으려합니다. 당신이 번호 목록이있는 경우 당신이 단지 같은 쿼리를 할 수 일반적으로 알고

SELECT * 
  FROM phonenumbers 
 WHERE number in ('5551234567', '5559876543', .... );

등으로이 할 수있는 방법이 있나요? 등

SELECT * 
  FROM phonenumbers 
 WHERE number in like ('555123%', '555321%', '555987%'); //I know this doesn't actually work

대신 개별적으로이 작업을 수행해야

SELECT * 
  FROM phonenumbers 
 WHERE number like '555123%' 
    or number like '555321%' 
    or number like '555987%'; //Which does work but takes a long time

아니면 그냥 누락 것으로이 작업을 수행하기 쉬운이있다? 나는 그 것을 함께 도움이 될있는 모든 명령이 있는지 모르겠어요, 포스트 그레스를 사용하고 있습니다. 감사!

해결법

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

    1.| 당신은 유사한 제품에 사용하고와 태그를 분리 할 수 ​​있습니다 파이프 '55만5천1백23% | 55만5천3백21% | 555,987%'

    | 당신은 유사한 제품에 사용하고와 태그를 분리 할 수 ​​있습니다 파이프 '55만5천1백23% | 55만5천3백21% | 555,987%'

    예를 들면 :

    SELECT * 
    FROM phonenumbers 
    WHERE number SIMILAR TO '555123%|555321%|555987%'
    
  2. ==============================

    2.늦게 파티에,하지만 후대를 위해 ... 또한 모든 (배열 식)를 사용할 수 있습니다

    늦게 파티에,하지만 후대를 위해 ... 또한 모든 (배열 식)를 사용할 수 있습니다

    SELECT * 
    FROM phonenumbers 
    WHERE number LIKE ANY(ARRAY['555123%', '555321%', '555987%'])
    
  3. ==============================

    3.모든 숫자를 가정하면 문자를 포함하고 숫자는 항상 "접두사"(예 : LIKE '123%')입니다하지 않습니다

    모든 숫자를 가정하면 문자를 포함하고 숫자는 항상 "접두사"(예 : LIKE '123%')입니다하지 않습니다

    SELECT  number
    FROM    (
            VALUES
            ('555123'),
            ('555321'),
            ('555000')
            ) prefixes (prefix)
    JOIN    phonenumbers
    ON      number >= prefix
            AND number < prefix || 'a'
    

    그렇게 빠를 수있는 경우에, PHONENUMBERS에 인덱스를 사용합니다.

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

    4.난 그렇게 생각하지 않는다, 그러나 당신은 당신이, 즉를에 일치시킬 값을 포함하는 테이블 기준에 PHONENUMBERS에 가입 할 수

    난 그렇게 생각하지 않는다, 그러나 당신은 당신이, 즉를에 일치시킬 값을 포함하는 테이블 기준에 PHONENUMBERS에 가입 할 수

    JOIN criteria ON phonenumbers.number LIKE criteria.phonenumbers
    

    조건 소수의 용은 아마 가치를하지만

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

    5.또한 공식 문서의 섹션 9.7.3을 참조 POSIX 정규 표현식에 의존 할 수 있습니다.

    또한 공식 문서의 섹션 9.7.3을 참조 POSIX 정규 표현식에 의존 할 수 있습니다.

    예를 들면 :

    SELECT * FROM foobar WHERE name ~ '12345|34567';
    

    당신의 이름 필드는 문자열 타입이므로주의하는 것이 중요하다.

  6. ==============================

    6.당신의 접두사가 모두 같은 길이 있습니다 아마도 경우 다음에 어디 RIGHT (번호)를 할 수있다 ( '123456', '234456', '등', '등')

    당신의 접두사가 모두 같은 길이 있습니다 아마도 경우 다음에 어디 RIGHT (번호)를 할 수있다 ( '123456', '234456', '등', '등')

  7. from https://stackoverflow.com/questions/2245536/sql-combining-multiple-like-queries by cc-by-sa and MIT license