Вы можете удалить все записи в строке 1 на основе URL-адреса - при условии, что столбец URL-адреса должен быть уникальным - если комбинация из более чем просто столбца URL-адреса или другого столбца просто меняет первые два предложения WHERE.- также предполагается, что таблица не является таблицей БЕЗ ROWID.
: -
SELECT count() FROM article WHERE url = 'myurl';
WITH cte AS (
SELECT rowid AS thisrowid
FROM article
WHERE url = 'myurl'
ORDER by url
LIMIT (SELECT count(*)-1 FROM article WHERE url = 'myurl')
)
DELETE FROM article WHERE rowid IN (SELECT thisrowid FROM cte);
При этом используется CTE (выражение общей таблицы (временная таблица)) для извлечения rowid (специальный обычно скрытый столбец, который всегда существует, если не указан БЕЗ ROWID) из всей строки 1 строки таблицы article в соответствии с критериями выбора (предложение WHERE) (в данном случае, гдестолбец url содержит myurl).То есть используется LIMIT, и это число строк в соответствии с тем же предложением WHERE, меньше 1.
Этот CTE, список строк, затем используется в качестве основы для предложения WHERE DELETE.
Рабочий пример SQL
Выше было проверено с использованием следующего SQL: -
DROP TABLE IF EXISTS article;
CREATE TABLE IF NOT EXISTS article (title TEXT, description TEXT, url TEXT, urltoimage TEXT, publisheddat);
INSERT INTO article VALUES
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01')
;
SELECT count() FROM article WHERE url = 'myurl';
WITH cte AS (
SELECT rowid
FROM article
WHERE url = 'myurl'
ORDER by url
LIMIT (SELECT count(*)-1 FROM article WHERE url = 'myurl')
)
-- SELECT * FROM cte;
DELETE FROM article WHERE rowid IN (SELECT * FROM cte);
SELECT count() FROM article WHERE url = 'myurl';
Результатами двух запросов являются: -
Количество строк передудаление: -

количество оставшихся строк: -

Альтернатива, более простая и исправляющая проблему, повторяющаяся
Говоря, что, вероятно, было бы так же просто
- создать новую таблицу, например таблицу article_new, включающую ограничение UNIQUE, но в противном случаеидентичные и
- затем заполняют это из существующей таблицы (используя INSERT OR IGNORE, чтобы не дать сбой при удалении дубликатов).
- затем переименуйте исходную таблицу (можно удалить ее, но безопаснее этого не делать), например, в article_old
- , затем переименуйте новую таблицу в исходное имя таблицы
- , наконец, отбросьте переименованный (если вы счастливы сделать это).
Код мог бы быть (опять-таки, предполагая, что столбец url должен быть уникальным): -
DROP TABLE IF EXISTS article_new;
DROP TABLE IF EXISTS article_old;
CREATE TABLE IF NOT EXISTS article_new (title TEXT, description TEXT, url TEXT UNIQUE, urltoimage TEXT, publisheddat);
INSERT OR IGNORE INTO article_new SELECT * FROM article;
ALTER TABLE article RENAME TO article_old;
ALTER TABLE article_new RENAME TO article;
DROP TABLE IF EXISTS article_old;
Рабочий пример (обратите внимание, больше строк добавлено с 3различные столбцы URL): -
DROP TABLE IF EXISTS article;
CREATE TABLE IF NOT EXISTS article (title TEXT, description TEXT, url TEXT, urltoimage TEXT, publisheddat);
INSERT INTO article VALUES
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl','myimageurl','2018-01-01'),
('Title001','Description001','myurl2','myimageurl','2018-01-01'),
('Title001','Description001','myurl3','myimageurl','2018-01-01'),
('Title001','Description001','myurl3','myimageurl','2018-01-01'),
('Title001','Description001','myurl3','myimageurl','2018-01-01'),
('Title001','Description001','myurl3','myimageurl','2018-01-01'),
('Title001','Description001','myurl3','myimageurl','2018-01-01')
;
DROP TABLE IF EXISTS article_new;
DROP TABLE IF EXISTS article_old;
CREATE TABLE IF NOT EXISTS article_new (title TEXT, description TEXT, url TEXT UNIQUE, urltoimage TEXT, publisheddat);
INSERT OR IGNORE INTO article_new SELECT * FROM article;
ALTER TABLE article RENAME TO article_old;
ALTER TABLE article_new RENAME TO article;
DROP TABLE IF EXISTS article_old;
SELECT * FROM article;
Результат: -
