УДАЛИТЬ и ДОСТУП - PullRequest
       19

УДАЛИТЬ и ДОСТУП

2 голосов
/ 28 мая 2010

Где ошибка в этом утверждении?

query = "DELETE TOP 10 FROM table WHERE field LIKE \"something*\""

Я получаю сообщение об ошибке в синтаксисе запроса.

Спасибо.

Ответы [ 7 ]

3 голосов
/ 28 мая 2010

Вы не можете использовать TOP с DELETE. Вы должны определить строки, а затем удалить их.

1 голос
/ 08 июня 2010

Попробуйте

Delete * from [tablename] where ID in (Select Top 10 ID from [Tablename] Where [Field] Like '*Condition*'

Таким образом, вы не смотрите * (все) в * (все).

1 голос
/ 28 мая 2010

Попробуйте

query = "DELETE * from (Select TOP 10  * FROM table WHERE field LIKE \"something*\")"

Хотя вы не можете напрямую использовать top с Delete, вы можете использовать его для производной таблицы, а затем Удалить из производной таблицы.

0 голосов
/ 29 мая 2010

Вы можете выполнить эту работу, используя вложенный запрос, подобный следующему ...


DELETE FROM [TABLE] WHERE [Col1] = (<br> SELECT TOP 10 [Col1] FROM [TABLE] WHERE [criteria] ORDER BY [criteria]<br> );

Обратите внимание, что в подзапросе вы просто вводите список в основное удалениезапрос, указав, что вы хотите удалить из Col1, и чем больше у вас критериев, тем меньше ресурсов вам понадобится, потому что будет исключено больше опций для удаления.

Для проверки этого первого пропустите часть DELETE FROMСинтаксис и просто запустите запрос, чтобы вы могли видеть, что вы будете вводить в ваш оператор DELETE, как это ...

SELECT TOP 10 [Col1] FROM [TABLE] WHERE [criteria] ORDER BY [criteria]

Важно, чтобы вы использовали ORDERПредложение BY, если ваш подзапрос возвращает более 10 результатов, таким образом вы получаете более высокую степень контроля над тем, что вы удаляете.

0 голосов
/ 28 мая 2010

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

Предположим, у вас есть поле с именем name, и его распределение примерно равномерно по всему алфавиту. Вы можете сделать несколько удалений, как это:

query0 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"D\""
query1 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"H\""
query2 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"L\""
query3 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"P\""
query4 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"T\""
query5 = "DELETE FROM table WHERE field LIKE \"something*\" and name <= \"X\""
query6 = "DELETE FROM table WHERE field LIKE \"something*\"
0 голосов
/ 28 мая 2010

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

DELETE FROM TBLWHATEVER WHERE FLDWHATEVER LIKE 'something%' AND ROWNUM < 10

Это зависит от того, имеет ли ваша БД функцию запроса, такую ​​как ROWNUM.

0 голосов
/ 28 мая 2010

обратите внимание на кавычки НРАВИТСЯ 'что-то *'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...