
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.
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...?