Объедините несколько операторов SQL в один

0

Как я могу объединить эти операторы в одном выражении SQL?

select city from station where city like 'a%';

select city from station where city like 'e%';

select city from station where city like 'i%';

select city from station where city like 'o%';

select city from station where city like 'u%'; 
  • 2
    Пометьте свой вопрос базой данных, которую вы используете.
  • 0
    Помог ли вам какой-либо из приведенных ниже ответов? Этикет SO заключается в том, чтобы принять ответ, щелкнув галочку в левой части вопроса, если он дает нужный вам ответ. В противном случае, пожалуйста, объясните, как они не работают для вас.
Теги:

3 ответа

5

Очевидным методом является union all:

select city from station where city like 'a%' union all
select city from station where city like 'e%' union all
. . . 

Возможно, почти так же очевидно:

where city like 'a%' or city like 'e%' or . . . 

Вы также можете использовать другой подход, например:

where left(city, 1) in ('a', 'e', 'i', 'o', 'u')

(Примечание: не все базы данных поддерживают left().)

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

1

where SUBSTR(city,1,1) in ('a', 'e', 'i', 'o', 'u') или использовать left(city, 1) если ваша база данных поддерживает его.

Вы всегда можете использовать union/union all между операторами или like 'a%' or like 'e%'.... но я предпочитаю использовать substr или left в таких случаях

  • 0
    substr, left ... не будет пользоваться индексами (если кто-то не подумает создать индекс как left (city, 1)).
  • 0
    @Cetin Basoz: Это правда, но с несколькими условиями LIKE вполне может оказаться, что простое полное сканирование таблицы намного быстрее, чем путаница в поиске индекса.
Показать ещё 1 комментарий
0

ИМХО лучшим методом, который также будет использовать существующий индекс, будет использовать OR:

select city from station 
where 
  city like 'a%' OR 
  city like 'e%' OR
  city like 'i%' OR
  city like 'o%' OR
  city like 'u%';

ПРИМЕЧАНИЕ. В MS SQL-сервере и postgreSQL это создает лучший план выполнения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню