Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 15984|Vastaus: 0

[Lähde] MySQL [poista päällekkäisyys ja jätä yksi] SQL-lause täydentää idean yhteenvedon

[Kopioi linkki]
Julkaistu 13.3.2019 13.37.42 | | | |
Muutama päivä sitten, kun tein vaatimusta, minun piti siivota kaksoiskappaleet mysql:ssä, ja silloin ajatuksena oli kirjoittaa ne koodin läpikäynnillä, mutta sitten ajattelin, että se oli liian monimutkaista, ajattelin, että ongelma pitäisi pystyä ratkaisemaan SQL-lauseella. Tarkistettuani tiedot ja konsultoituani pomoa, sain aikaan erittäin kätevän SQL-lauseen, ja tässä jaan tämän SQL-lauseen ja ideoita.

Tarveanalyysi
Jos tietokannassa on päällekkäisiä tietueita, poista ja säilytä yksi niistä (riippumatta siitä, ovatko kaksoiskenttien määrittämisen kriteerit useampia kenttiä).


ratkaisu

Kun kohtaat tämän tarpeen, sinulla on todennäköisesti ajatus sydämessäsi. Nopein ajatukseni oli, että voisin ratkaista sen sql-lauseella, mutta monimutkaisissa SQL-lauseissa olin liian pinnallinen, joten halusin pyytää apua pomolta.

Löydä joku auttamaan

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给@赵七七同学,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

Oma Baidu

Löysin SQL-lauseen:


Tämä SQL-idea on ilmeinen, siinä on seuraavat kolme vaihetta:

  • VALITSE peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Hae duplikaattitietueita taulukosta ehtona
  • VALITSE min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Toinen ehto on ID:n pienin arvo duplikaattitietueissa kyselytaulukossa
  • Lopuksi, yllä mainittujen kahden ehdon mukaisesti, poista jäljellä olevat kaksoiskappaleet paitsi pienin ID kaksoiskappaleesta


Valitettavasti tämän lauseen suorittamisessa on virhe, mikä tarkoittaa suunnilleen sitä, että taulukkoa ei voi päivittää samaan aikaan kyselyn kanssa.


Koodi ratkaistu

Yllä olevan SQL-väitteen perusteella uskon, että voit saavuttaa saman tavoitteen kahdessa vaiheessa koodin avulla:

  • Duplikaattiaineistot poistetaan ensin
  • Kyselyaineiston perusteella jäljelle jääneet kaksoiskappaleet poistetaan silmukassa


Minulla oli idea, ja kirjoitin sen nopeasti, mutta olin järkyttynyt, kun käynnistin sen, ja oikeasti tarvitsin sen116:tvasemmalle ja oikealle, ja sitten haluan löytää SQL-lauseen, jota voin käyttää, liittää koodin ja juoksevan tuloksen:




Täydellinen [duplikointi ja jätä yksi] SQL

Lopulta sain täydellisen vastauksen teknisessä ryhmässä, katso tätä SQL-lausetta:


Yllä olevaa SQL-väitettä, jos katsoo tarkasti, idean ymmärtäminen ei ole vaikeaa, ja se on todennäköisesti jaettu kolmeen vaiheeseen ymmärtääkseen:

  • (VALITSE min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, rahalliset, consume_time HAVING count(*) > 1) t2 Hae kaksoiskappaleet muodostaaksesi kokoelman (väliaikainen taulukko t2), joka sisältää kunkin kaksoiskappaleen minimi-ID:n
  • consum_record.user_id = t2.user_id ja consum_record.monetary = t2.monetary ja consum_record.consume_time = t2.consume_time Associate-kentät kaksoiskriteereille
  • Poista tietueet, joiden ID:t ovat suurempia kuin T2:n ID:t ehtojen mukaan


Kun näin tämän lauseen, ajattelin itsekseni, että tämä oli liian voimakas. Tällainen yksinkertainen sql-lause voi ratkaista näin monimutkaisen ongelman, ja asento nousee~
Se on myös todella nopea ajaa, alkuperäinen koodisilmukan suoritus kestää noin 116 sekuntia, mutta tässä 0,3 sekuntia riittää, mahtavaa~







Edellinen:javaEE lokakuun 2018 videomateriaali
Seuraava:SQL muuttaa päivitettyä dataa satunnaisesti
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com