» »

[MariaDB] - Brisanje tistih duplikatov, ki imajo višji id

[MariaDB] - Brisanje tistih duplikatov, ki imajo višji id

HotBurek ::

Dobro jutro.

Evo, zdajle sem pri koncu s prvim sešnom. Autocoplete power-ed by SQL zadovoljivo hitro in uspešno nastaja.

Seadj pa izziv.

V tabeli imam nekaj duplikatov. Rad bi pobrisal tiste duplikate, ki imajo večji id (po grupah, ane).

Takole lahko zlistat tiste, ki so duplikati.

SELECT *
FROM (
	SELECT `id`, `keyword`, COUNT(*) AS 'count'
	FROM `autocomplete`
	GROUP BY `keyword`, `country`
) AS x
WHERE x.`count` > 1;

Takole lahko za duplikat najdem višji id:

SELECT MAX(`id`) AS 'id', `keyword`
FROM `autocomplete`
WHERE `keyword` = 'test'
GROUP BY BINARY `keyword`;

Zdej moram pa to še nekako zvezat skupaj... Tu se je ustavilo.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
  • spremenilo: HotBurek ()

socialec ::

ok, mod, imaš prav, za ohranitev nekdanje forumske uporabnosti je potrebno, če sploh, resno participirati v temu...

op, tole bi delovalo?

DELETE a
FROM autocomplete a
JOIN autocomplete b 
ON a.keyword = b.keyword 
AND a.country = b.country
AND a.id > b.id;

Tody ::

Po vseh teh letih si se vedno nisi privoscil sql tecaja na udemy... Ko v ta prvem stavku najdes vse podvojene nad njimi naredis novo poizvedbo.

Vparasi chatgtp pa ti bo razložil korak za korakom, tko da bose vedel kaj je naredil in se se kaj naučili

Zgodovina sprememb…

  • spremenil: Tody ()

HotBurek ::

Rešil sem takole:

DELETE
FROM `autocomplete`
WHERE `id` IN (
	SELECT x.`id`
	FROM (
		SELECT MAX(`id`) AS 'id', `keyword`, COUNT(*) AS 'count'
		FROM `autocomplete`
		GROUP BY BINARY `keyword`, `country`
	) AS x
	WHERE x.`count` > 1
);

Čeprav, rešitev od gospoda zgoraj je mogoče boljša, ker če imaš več kot 2 ponovitve:

- moja rešite pobriše zgolj tisto z MAX id
- od gospoda pa vse, ki so višje od MIN (s tem, da bi bilo potrebno to malo dodelat)

Evo, sem dodal unique index gor, in pravi, da je vse unique, hrakti so pa podatki še v tabeli. Haha. :D

Gremooooo.... iiiiiiiiii ... bbiiiiiiiiii ..... cccaaaaaaaaa.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

socialec ::

v zasnovi problema si bil dovolj precizen, ni mi jasno, kako si zadovoljen s polovično rešitvijo...

ah, ti moderni časi...

DamijanD ::

poglej si še "having"

HotBurek ::

Dodal bom še eno malenkost, mogoče pride prav v prihosnosti.

Če je collation nastavljen na utf8mb4_bin, ima ta collation PAD SPACE, kar pomeni, da enači 'a' = 'a '. In če sta vnešeni obe vrednosti, potem ni mogoče dat unique index-a gor (in obratno).

Da se zadevo reši, ob predpostavki da se želi 'a' in 'a ' obravnavat kot dve različni vrednosti, je potrebno stolpec nastavit na NO PAD collation.

V mojem primeru: iz utf8mb4_bin na utf8mb4_nopad_bin

SQL v pomoč:

SELECT collation_name 
FROM information_schema.COLLATIONS
WHERE collation_name LIKE '%nopad%'
	AND collation_name LIKE '%utf8%'; 

Vir: https://mariadb.com/kb/en/supported-cha...
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

socialec ::

Verjetno se najde tudi kakšen trim() poleg lower()... encodingi so verjetno enotni.

Mislim, nimam ničesar od tega, ker... nimam :D

Utk ::

Po 9 letih odpiranja tem o tem, se pravi da se vsaj tolk časa ukvarja s tem...še zmeraj je pri osnovah.

socialec ::

HotBurek chata na tak način in na glas razmišlja - da je še nekako smiselno in tehnično forumsko.

Vsi ne marajo tega, meni pa je tudi zabavno, ker ne škodi.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

MySql

Oddelek: Programiranje
11779 (442) kuall
»

[MariaDB] Zakaj SQL enači "ab " z "ab" v WHERE pogoju?

Oddelek: Programiranje
101127 (712) DamijanD
»

Kako pohitrit build-anje index za autocomplete?

Oddelek: Programiranje
111133 (665) DamijanD
»

[MariaDB] Kako definirat tabelo, da bo index ločil med "a" in "ä"?

Oddelek: Programiranje
7880 (594) Miha 333
»

[MariaDB] Kolikokrat se pojavi tekst v tekstu?

Oddelek: Programiranje
7866 (559) BigWhale

Več podobnih tem