Portál AbcLinuxu, 23. říjen 2017 23:06

Dotaz: SQL dotaz

11.1. 18:20 Hanyz
SQL dotaz
Přečteno: 958×
Odpovědět | Admin
Ahoj, potřeboval bych jednu věc, ale úplně ji zjednoduším.

Mám 2 tabulky. V první tabulce tab1 mám sloupce a1, a2, a3. Všechny sloupce jsou naplněny číselnými hodnotamy. Pak mám druhou tabulku tab2 se sloupci b1, b2, b3. Všechny sloupce jsou taktéž naplěnny číselnými hodnotamy. A teď bych potřeboval, aby sloupec a2 z tab1 byl přepsán (aktualizován) na hodnoty odpovídající sloupci b2 z tabulky tab2. Přičemž, aby to tam jen tak nenaházel, tak přepiš data jen tam, kde hodnoty sloupců a3 a b3 se sobě musí rovnat.

Šlo by to nějak přes UPDATE? Děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.1. 20:40 rastos | skóre: 60 | blog: rastos
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Šlo. Detaily môžu záležať na konkrétnej databáze. Pred pár dňami som niečo také riešil a bol to "vopruz". Hlavne preto, že sa mi to kazili constrainty. Ale v princípe to ide.
11.1. 20:42 Ivan2 | skóre: 4
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
tohle?

http://stackoverflow.com/questions/2446764/update-statement-with-inner-join-on-oracle#
11.1. 20:45 Kit | skóre: 38 | Brno
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Především doporučuji zvolit lepší názvy tabulek a sloupců. Bude se s nimi mnohem lépe pracovat. Nad takovými hloupými názvy se mi ani nechce přemýšlet.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
11.1. 20:54 jekub
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
typ db je tajny, tak kdyby nahodou
update (
select a2,b2
from tab1
inner join tab2 on a3=b3
)
set a2=b2
12.1. 11:29 Štefan
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
pro ms sql:
update tab1
set tab1.a2 = tab2.b2
from tab1
join tab2 on tab2.b3=tab1.a3
3.2. 10:49 EtDirloth | skóre: 4
Rozbalit Rozbalit vše Re: SQL dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
sqlite, ktore nema klauzulu FROM v UPDATE:

-- pre b2 NOT NULL a pocty zaznamov (zhruba) 1:1 v tab1:tab2; pri velkom tab2 s indexom na (b3,b2)
UPDATE tab1
   SET a2 = COALESCE((
         SELECT tab2.b2
            FROM tab2
            WHERE tab2.b3 = tab1.a3
            LIMIT 1
         ), a2)
;

-- resp. pre velke tab1 a male tab2; s indexom na (a3)
UPDATE tab1
   SET a2 = (
         SELECT tab2.b2
            FROM tab2
            WHERE tab2.b3 = tab1.a3
            LIMIT 1
         )
   WHERE a3 IN (
         SELECT b3
            FROM tab2
         )
;
-- resp. pre male tab1 a velke tab2; s indexom na (b3,b2)
UPDATE tab1
   SET a2 = (
         SELECT tab2.b2
            FROM tab2
            WHERE tab2.b3 = tab1.a3
            LIMIT 1
         )
   WHERE EXISTS (
         SELECT 1
            FROM tab2
            WHERE b3 = a3
         )
;

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.