簡體   English   中英

如何在MySQL UPDATE語句中模擬OFFSET?

[英]How can I simulate OFFSET in a MySQL UPDATE statement?

我有一個MySQL數據庫表,其中包含文章ID(主鍵)和文章標題。 我想從表中刪除重復的標題,但保留第一次出現的標題。 我最初只是對所有重復的標題進行查詢:

SELECT
    title,
    count( id ) AS count
FROM articles
GROUP BY title
HAVING count > 1

然后我使用foreach循環和此命令將所有重復的標題替換為空白:

UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'

我想更新articles表並使用類似的東西替換除第一個條目之外的所有重復標題,基於文章ID ASC。 問題是OFFSET似乎不能在UPDATE中工作。 有沒有辦法在單個查詢中執行此操作?

UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id ASC
OFFSET 1
UPDATE articles a
INNER JOIN articles b
    ON a.title = b.title AND a.ID > b.ID
SET title = '';

這基本上說

更新存在具有相同標題和較低ID的匹配文章的所有文章

我發現另一個解決方案有點超出我原來問題的范圍,但仍然相關。

我已經從找到它們的第一個查詢中獲得了重復數。 我從此計數中減去一個,然后通過ID DESC命令我的UPDATE查詢,然后將查詢限制為計數減1。 這用於相同的目的並刪除除第一個條目之外的所有重復項。

這是我使用的UPDATE查詢:

UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id DESC
LIMIT $duplicate_count_minus_one

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM