2016-03-02 2 views
3

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

Насколько мне известно, у меня есть два варианта.

Создать forloop в моем коде, который выполняет:

SELECT name from table where id=x 

где х всегда число.

или я написать один запрос, как это:

SELECT name from table where id=1 OR id=2 OR id=3 

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

Я прошу об этом в представлении производительности.

Что хорошего в решении этой проблемы?

+0

Каковы ваши соображения? Вам нужно положить это как часть некоторого кода в другое приложение? Вы говорите просто о простоте использования? Представление?? Кроме того, почему бы не использовать оператор IN? (что означает, ОТ таблицы WHERE id в (1,2,3,4,5,6,7 ......);) – DougieHauser

ответ

3

SQLite имеет limits от размера запроса, так что если нет известно верхнего предела на количестве идентификаторов, вы не можете использовать один запрос.

Когда вы читаете несколько строк (примечание: IN (1, 2, 3) проще, чем многие OR), вы не знаете, к какому идентификатору принадлежит имя, если вы также не выбрали это, или не сортируете результаты по идентификатору.

Не должно быть заметной разницы в производительности; SQLite - это встроенная база данных без накладных расходов на клиент/сервер, и запрос не нуждается в повторном анализе, если вы используете подготовленный оператор.

0

А «хорошее» решение с помощью IN оператора:

SELECT name from table where id in (1,2,3) 
0

Кроме того, оператор IN является синтаксическим построен именно для этой цели ..

SELECT name from table where id IN (1,2,3,4,5,6.....) 
0

Надеясь, что вы получаете список ID, на котором вы должны выполнить запрос для имен как входной темп таблицы @ InputIDTable,

SELECT name from table WHERE ID IN (SELECT id from @InputIDTable) 
Смежные вопросы