Как правильно сформировать этот оператор SQL? - PullRequest
3 голосов
/ 13 октября 2011

У меня есть таблица базы данных новостей, в которой есть два вида статей: социальные и официальные (взаимоисключающие).

Что я хотел бы сделать, так это уменьшить количество социальных строк в таблице доконкретный номер, оставляя в покое официальные новостные статьи.

Вот что я до сих пор придумал:

DELETE
FROM News
WHERE _id NOT IN
    (SELECT _id
     FROM News
     WHERE IsOfficialNews=0
     ORDER BY Date DESC LIMIT 20

     UNION SELECT _id
     FROM News
     WHERE IsOfficialNews=1)

Однако я получаю сообщение об ошибке ORDER BY clause should come after UNION not before.Перемещение ORDER BY в конец внутреннего SELECT приводит к LIMIT clause should come after UNION not before.

Я понимаю сообщение об ошибке, но мне интересно, есть ли другой способ выполнить то, что я пытаюсь сделать.Если я переместу предложение LIMIT в конец внутреннего SELECT, у меня все равно останется более 20 социальных строк в таблице (поскольку она также будет считать официальные строки).

1 Ответ

3 голосов
/ 13 октября 2011

Может быть так (см. Комментарий выше):

DELETE FROM News
WHERE IsOfficialNews=0
AND _id NOT IN
(SELECT _id
 FROM News
 WHERE IsOfficialNews=0
 ORDER BY Date DESC LIMIT 20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...