有時候 業務功能出現了問題,最後發現是數據有問題,此時我們需要進出現問題的數據查詢出來,並根據查詢的結果將重複數據進行處理。
舉一個列子,有如下數據
id | from | to | time | workbench_id |
---|---|---|---|---|
1 | 345 | 543 | 156456456 | 3 |
2 | 345 | 543 | 1564651156 | 3 |
3 | 543 | 345 | 1564661651 | 3 |
比如上表的數據中,我們認爲from
和to
以及workbench_id
一樣的數據只能有一條,從業務上來說,由這三個字段確定一條唯一的數據,此時我們需要將數據庫中類似id
爲1和2這種不合法的數據給清除掉。首先我們需要將不合法的數據查詢出來,查詢語句如下
SELECT
*
FROM
(
SELECT *, CONCAT( `from`, `to`, workbench_id) AS fromToWorkbenchid
FROM chat_session
) t
WHERE
t.fromToWorkbenchid IN (
SELECT tt.fromToWorkbenchid
FROM (
SELECT *, CONCAT( `from`, `to`, workbench_id ) AS fromToWorkbenchid
FROM chat_session
) tt
GROUP BY fromToWorkbenchid
HAVING count( fromToWorkbenchid ) > 1
);
實際上就是將這三個字段使用CONCAT
鏈接起來作爲一個新的字段使用,之後在此基礎上進行下一步的查詢。
要刪除數據也是類似於上面的思路:
DELETE FROM chat_session
WHERE id NOT IN
(
SELECT maxid
FROM (
SELECT MAX(id) AS maxid, CONCAT(from, to, workbench_id)
AS fromToWorkbenchid
FROM chat_session
GROUP BY fromToWorkbenchid
) t
)