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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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 ... ;) nový
AZOR 15.10.2010 20:35
AZOR
DB2 ale není normální, je z IBM ;-) nový
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… nový
Anicka 15.10.2010 08:23
Anicka

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:


SELECT * FROM (
SELECT klcitc, 
kl_mob, 
(select count (*) from klnt where kl_mob=t.kl_mob) marta
FROM klnt t
WHERE kl_mob <> '' 
)
WHERE marta>1

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