Portál AbcLinuxu, 18. května 2025 17:55

Dotaz: mazání záznamů na základě jiné tabulky

17.1.2009 11:37 jnovacek | skóre: 22 | blog: NovLin
mazání záznamů na základě jiné tabulky
Přečteno: 416×
Odpovědět | Admin

Dobrý den, potřebuji pročistit jednu tabulku na základě záznamu v jiné tabulce. Mám dvě tabulky, v obou mám ID_neco. V jedné tabulce mám některé záznamy vymazané. V druhé zůstává řádek s ID_neco porad dal.

Jak mám napsat dotaz: Když nenajdeš ID_neco v tabulce 2 smaž záznam s příslušným ID_neco v tabulce 1.

Používám mysql.

Předem děkuji

Nováček

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.1.2009 12:58 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: mazání záznamů na základě jiné tabulky
Odpovědět | | Sbalit | Link | Blokovat | Admin
MySQL umí v DELETE připojovat další tabulky a mazat jen z některých z nich, viz dokumentaci. Je tam třeba tenhle příklad:
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
a pokud to dobře chápu, je to přesně to, co potřebujete.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Dalibor Smolík avatar 25.1.2009 01:47 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: mazání záznamů na základě jiné tabulky

Obávám se, že tohle nebude fungovat.  V deklaraci

LEFT JOIN t2 ON t1.id=t2.id
t2.id totiž neexistuje (t2.id IS NULL), takže se nemůže přiřadit k id v prní tabulce ..
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
25.1.2009 14:08 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: mazání záznamů na základě jiné tabulky
Chci smazat takové záznamy z t1, ke kterým neexistuje odpovídající záznam v t2. To znamená, že ve spojení t1 LEFT JOIN t2 ... bude právě pro takové záznamy platit t2.id IS NULL. Proto se použije vnější spojení, a ne vnitřní :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Tarmaq avatar 20.1.2009 01:34 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: mazání záznamů na základě jiné tabulky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevim jestli by to, co chcete udelat, nemelo byt reseno pomoci cizich klicu..

jinak resil bych to asi nejak takto: DELETE FROM tabule1 WHERE id NOT IN (SELECT id FROM tabule2)
Don't panic!
20.1.2009 15:59 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: mazání záznamů na základě jiné tabulky
Odpovědět | | Sbalit | Link | Blokovat | Admin
delete from aaa where not exists (select 1 from bbb where aaa.col = bbb.col);

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.