Справка по выбору и удалению SQL

#sql #sql-server #sql-server-2005 #syntax

#sql #sql-сервер #sql-server-2005 #синтаксис

Вопрос:

Как вы выбираете или удаляете определенный список чисел из таблицы?

Например,

выберите * из таблицы, где ID = 1,2,3,4,5,6

не работает. Я должен был бы сделать, где ID = 1 или ID = 2 или ID = 3 и т.д. и т.п.

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

Комментарии:

1. Кстати, потрясающее имя пользователя. Никогда не теряйте ее.

Ответ №1:

 select * from table where ID IN(1,2,3,4,5)
  

Ответ №2:

 select * from table where ID IN (1,2,3,4,5,6)
  

Ответ №3:

Попробуйте использовать оператор in select * из таблицы, где идентификатор in (1,2,3,4,5,6) также работает с delete

Ответ №4:

вы можете попробовать с

 Where ID in (1,2,3)
  

Ответ №5:

если вы ищете динамический запрос, то

выполнить (‘выбрать * из таблицы, где идентификатор В (1,2,3,4,5,6)’)

в противном случае

выберите * из таблицы, в которой указан идентификатор (1,2,3,4,5,6)

выполнит задание

Комментарии:

1. Этот ответ был намного позже, чем несколько других, в которых говорилось то же самое, и не внес ничего нового. Кроме того, два предложенных решения на самом деле одинаковы — в двух операторах sql нет никакой разницы…

Ответ №6:

Ответ №7:

 SELECT * FROM Table WHERE Id IN (1,2,3,4,5,6)
  

Обратите внимание, что вы не можете вставить весь список в параметризованный запрос — например, запрос, WHERE Id IN (?) содержащий '1,2,3,4,5,6' параметр, не даст нужных результатов.

Хороший способ избежать динамического построения вашей строки SQL (и потенциального подвергания себя SQL-инъекции) — это динамически создавать количество параметров, а затем объединять их в вашем SQL.

Полный пример с Python и SQLite (хотя этот метод можно использовать на любом языке с любым ядром базы данных SQL):

 ids = [1, 2, 3, 4, 5, 6]
params = tuple(ids) # because sqlite wants the parameters in tuple format
paramstring = ', '.join(['?' for dummyp in ids])
# paramstring now contains '?, ?, ?, ?, ?, ?'
# - the same number of '?' as the number of ids

sql = 'SELECT * FROM Table WHERE Id IN ('   paramstring   ')'
# sql now contains 'SELECT * FROM Table WHERE Id IN (?, ?, ?, ?, ?, ?)'

conn = sqlite3.connect(':memory:')
cursor = conn.execute(sql, params)

# You can now iterate through the cursor to get your data