簡體   English   中英

如何從我的查詢中刪除 MySql 中 row_num > 2 的位置?

[英]How to delete from my query where row_num > 2 in MySql?

我的數據庫中有這張表,其架構如下:

nearstops(nearbystopname, latitude, longitude, mainaddress), 我做了如下查詢

SELECT 
    nearbystopname,
    latitude, 
    longitude, 
    mainaddress, 
    ROW_NUMBER() OVER (
        PARTITION BY 
            nearbystopname,
            mainaddress
        ORDER BY 
            nearbystopname,
            mainaddress
    ) row_num
    FROM 
    DUSAgeocodeDB.nearbystops

這給了我以下信息:

在此處輸入圖像描述

我的問題是,我將如何通過刪除 row_num > 2 的結果並將更改反映到我的數據庫中來 go ?

我嘗試了以下代碼:

with cte as (
SELECT 
    nearbystopname,
    latitude, 
    longitude, 
    mainaddress, 
    ROW_NUMBER() OVER (
        PARTITION BY 
            nearbystopname,
            mainaddress
        ORDER BY 
            nearbystopname,
            mainaddress
    ) row_num
    FROM 
    DUSAgeocodeDB.nearbystops
    ) delete from cte where row_num > 1;

但它給了我以下錯誤:

錯誤代碼:1146。表 'dusageocodedb.cte' 不存在

任何幫助都感激不盡!

假設您在表上有一個主鍵,那么:

delete ns 
    from DUSAgeocodeDB.nearbystops ns join
         (select nearbystopname, mainaddress, min(id) as min_id
          from DUSAgeocodeDB.nearbystops ns2
          group by nearbystopname, mainaddress
         ) ns2
         on ns2.nearbystopname = ns.nearbystopname and 
            ns2.mainaddress = ns.mainaddress and
            ns.id > ns.id;

如果您沒有主鍵,最好的辦法可能是重新填充表:

create table temp_ns as 
    select nearbystopname, latitude, longitude, mainaddress, 
           row_number() over (partition by nearbystopname, mainaddress) as seqnum
    from DUSAgeocodeDB.nearbystops ns;

truncate table DUSAgeocodeDB.nearbystops ns;  -- SAVE first!!!

insert into DUSAgeocodeDB.nearbystops (nearbystopname, latitude, longitude, mainaddress)
    select nearbystopname, latitude, longitude, mainaddress
    from temp_ns
    where seqnum = 1;

暫無
暫無

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

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