Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem SQL výběr klíčů u duplicitních hodnot

Mám v DB2 tabulku klnt, obsahuje mj. sloupce klcitc (to je klíč) a kl_mob (číslo mobilu). Šéf si vymyslel, že prý číslo mobilu má být též v DB unikátní (nepište, že je to kravina, je to prý zákazníkův požadavek) a mám mu napsat skript, který vrátí klcitc řádků s duplicitním mobilem. Připomínám, že DB2 GROUP BY nezná.

Příklad:

SELECT klcitc, kl_mob 
FROM klnt 
WHERE kl_mob <> ''
ORDER BY kl_mob 

vrátí mj.
2247 604234777
2594 604234777
2595 604234777
a já potřebuju, aby to vypsalo id 2. a 3. řádku s duplicitním telefonem, tedy 2594, 2595.

Taky mne napadlo udělat si pomocnou tabulku, která bude obsahovat sloupce klcitc a kl_mob, kl_mob bude mít nastaveny unikátní hodnoty a nasypat do ní odpovídající sloupce z pův. tabulky. Jenže nevím jak přimět DB2, aby po té, co dojde k chybě pokusu o vložení duplicitního záznamu pokračovala dalším řádkem a nespadla :-(. Pak bych porovnáním těch dvou tabulek byla schopná zjistit klcitc duplicit.

Předmět Autor Datum
Neviem či dobre vidím, ale aj riadok 2247 má t.č. 604234777, tak ako aj ostatné riadky... /To len ta…
pme 14.10.2010 17:25
pme
Nie som sice profesionalny SQLista ale podla mna musel by si urobit select s kazdym telefonnym cislo…
MM.. 14.10.2010 18:01
MM..
Pokud DB2 zná join (nevím, nikdy jsem v ní nepracoval), snad by mohlo pomoci : SELECT DISTINCT d1.k…
hynajs 14.10.2010 22:44
hynajs
tohle je správné řešení.. případně třeba takto: SELECT * FROM ( SELECT klcitc, kl_mob, (select cou…
AZOR 14.10.2010 22:52
AZOR
Tvůj select nefunguje, DB2 je totiž poněkud hloupá DB, takže napíše S QL0104 - Token MARTA was not…
Anicka 15.10.2010 08:16
Anicka
DB2 neznám, ale každná normální databáze umi aliasy ... ;)
AZOR 15.10.2010 20:35
AZOR
DB2 ale není normální, je z IBM ;-)
touchwood 16.10.2010 08:35
touchwood
Možná, kdyby se dal místo aliasu Marta třeba Martina...? poslední
host 16.10.2010 10:48
host
Super, tohle sice vrací oba sloupce, klientovi by stačilo jen ten první s klíčem, ale vem to čert. H…
Anicka 15.10.2010 08:23
Anicka

Nie som sice profesionalny SQLista ale podla mna musel by si urobit select s kazdym telefonnym cislom zaradom od zaciatku az dokonca. Alebo jednoduchsia moznost urob si select vsetkych poloziek z databazy taky, aby to zoradil podla telefonneho cisla. Potom ti staci softwarovo porovnavat len polozky po sebe iduce.

Pri vkladani si predsa mozes urobit kontrolu ze si das select na to jedno novovkladane telefonne cislo a ked uz je v tabulke tak vypises nejaky error. Mozno to ide nastavit aj v databaze ze to ma byt jedinecne, a error bude vyhadzovat automaticky DB engine, to zhlavy neviem.

Pokud DB2 zná join (nevím, nikdy jsem v ní nepracoval), snad by mohlo pomoci :

SELECT DISTINCT d1.klcitc,d1.kl_mob
FROM klnt AS d1 JOIN klnt AS d2 ON d1.kl_mob=d2.kl_mob
WHERE d1.kl_mob <> '' and d1.klcitc>d2.klcitc
ORDER BY d1.kl_mob

pokud jsem neflákl chybu v syntaxi ( neodzkoušeno) .

Zpět do poradny Odpovědět na původní otázku Nahoru