SQL - Комбинирующий несколько нравятся запросы

Эй мой первый вопрос на ТАК! Anywho...

Все еще относительно newb в SQL, таким образом, я думаю, что мог бы пропускать что-то здесь. Мой вопрос, у меня в настоящее время есть таблица, полная номеров телефона. Я хочу иметь запрос, где я ищу номера телефона, которые подобны списку, который я имею. Так, например, я хочу найти номера телефона, которые начинаются '555123', '555321', и '555987'. Я обычно знаю, если у Вас есть список чисел, Вы могли бы просто сделать запрос такой как

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

Или есть ли более легкое, чтобы сделать это, что я просто отсутствую? Я использую пост-ГРЭС, я не знаю, существуют ли какие-либо команды, это имеет, который выручил бы с этим. Спасибо!

27
задан OMG Ponies 11 February 2010 в 15:44
поделиться

4 ответа

Вы можете использовать SIMILAR TO и разделять теги с помощью | pipe '555123%|555321%|555987%'

например:

SELECT * 
FROM phonenumbers 
WHERE number SIMILAR TO '555123%|555321%|555987%'
38
ответ дан 28 November 2019 в 04:30
поделиться

Я так не думаю, но вы могли бы присоединить phonenumbers к таблице criteria, содержащей значения, которые вы хотите сопоставить, т.е.

JOIN criteria ON phonenumbers.number LIKE criteria.phonenumbers

... вероятно, не стоит этого делать для небольшого количества условий, хотя

3
ответ дан 28 November 2019 в 04:30
поделиться

Предполагается, что все ваши числа не содержат букв, а ваши числа всегда являются «префиксами» (например: КАК '123%' ) :

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

Это будет использовать индекс для телефонных номеров , если таковые имеются, так что может быть быстрее.

6
ответ дан 28 November 2019 в 04:30
поделиться

Возможно, если ваши префиксы имеют одинаковую длину, тогда вы можете сделать где RIGHT (число) в ('123456', '234456', 'etc', 'etc')

1
ответ дан 28 November 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: