
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.
Neviem či dobre vidím, ale aj riadok 2247 má t.č. 604234777, tak ako aj ostatné riadky... /To len tak na okraj/ čiže o čo Ti ide ???
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) .
tohle je správné řešení.. případně třeba takto:
Tvůj select nefunguje, DB2 je totiž poněkud hloupá DB, takže napíše
S
DB2 neznám, ale každná normální databáze umi aliasy ... ;)
DB2 ale není normální, je z IBM
Možná, kdyby se dal místo aliasu Marta třeba Martina...?
Super, tohle sice vrací oba sloupce, klientovi by stačilo jen ten první s klíčem, ale vem to čert. Hlavně, že to vrací pouze opakující se řádky bez toho prvního. Díky