Используя SQL КАК и ВО вместе

Существует ли способ использовать КАК и ВО вместе?

Я хочу достигнуть чего-то вроде этого.

SELECT * FROM tablename WHERE column IN ('M510%', 'M615%', 'M515%', 'M612%');

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

47
задан Nick 23 February 2010 в 12:45
поделиться

4 ответа

Вы можете сделать это в одном запросе, объединив отдельные LIKE с OR:

SELECT * FROM tablename
WHERE column LIKE 'M510%'
OR    column LIKE 'M615%'
OR    column LIKE 'M515%'
OR    column LIKE 'M612%';

Просто имейте в виду, что такие вещи, как LIKE и построчные функции, не всегда так хорошо масштабируются. Если ваша таблица, вероятно, вырастет, вы можете рассмотреть возможность добавления еще одного столбца в свою таблицу для независимого хранения первых четырех символов поля.

Это дублирует данные, но вы можете гарантировать их согласованность, используя триггеры вставки и обновления. Затем поместите индекс в этот новый столбец, и ваши запросы будут выглядеть так:

SELECT * FROM tablename WHERE newcolumn IN ('M510','M615','M515','M612');

Это перемещает стоимость расчета в точку, где это необходимо (при изменении данных), не каждый раз, когда вы ее читаете. . Фактически, вы можете пойти еще дальше и использовать новый столбец как логическое значение, указывающее, что это один из четырех специальных типов (если эта группа специальных параметров будет редко меняться). Тогда запрос будет еще быстрее:

SELECT * FROM tablename WHERE is_special = 1;

Этот компромисс между требованиями к памяти и скоростью - полезный трюк для больших баз данных - как правило, дисковое пространство дешево, процессорное ворчание ценно, а данные читаются гораздо чаще, чем записываются. Перенося расчет стоимости на этап записи, вы амортизируете стоимость всех операций чтения.

55
ответ дан 26 November 2019 в 19:19
поделиться

Используйте более длинную версию IN, которая представляет собой группу ИЛИ.

SELECT * FROM tablename 
WHERE column LIKE 'M510%'
OR column LIKE 'M615%'
OR column LIKE 'M515%'
OR column LIKE 'M612%';
-121--1153266-

Я не уверен, что TPL достаточен в вашем случае использования. Из моего понимания, основным вариантом использования TPL является разделение одной огромной задачи на несколько небольших задач, которые могут выполняться бок о бок. Например, если у вас большой список и вы хотите применить одно и то же преобразование к каждому элементу. В этом случае можно выполнить несколько задач, применяющих преобразование к подмножеству списка.

Случай, который вы описываете, кажется, не вписывается в эту картину для меня. В вашем случае у вас нет нескольких задач, которые делают одно и то же параллельно. У вас есть несколько различных задач, каждая из которых - это собственная работа (производители) и одна задача, которая потребляет. Возможно, TPL может использоваться для потребительской части, если вы хотите иметь несколько потребителей, потому что в этом случае каждый потребитель выполняет одну и ту же работу (предполагая, что вы найдете логику для обеспечения временной непротиворечивости, которую вы ищете).

Ну, это, конечно, просто мой личный взгляд на тему

Жить долго и процветать

-121--2343265-

Как использовать подстроку с IN.

select * from tablename where substring(column,1,4) IN ('M510','M615','M515','M612')
59
ответ дан 26 November 2019 в 19:19
поделиться

Используйте более длинную версию IN, которая представляет собой связку OR.

SELECT * FROM tablename 
WHERE column LIKE 'M510%'
OR column LIKE 'M615%'
OR column LIKE 'M515%'
OR column LIKE 'M612%';
5
ответ дан 26 November 2019 в 19:19
поделиться

Вам нужно будет использовать несколько терминов LIKE , соединенных ИЛИ .

8
ответ дан 26 November 2019 в 19:19
поделиться
Другие вопросы по тегам:

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