#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:
SELECT * FROM myTable WHERE id BETWEEN 1 AND 6
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between
Ответ №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