Autor | Zpráva | ||
---|---|---|---|
Michales Profil |
Ahoj všem.
Prosím o radu jak by měl vypadat SQL dotaz na UPDATE. Mám sloupec Text a sloupec t_id Ve sloupce Text jsou čísla a mohou se opakovat ve sloupci t_id jsou jen jedničky a nuly. Nyní potřebuji následující update. Text t_id 6548 1 79632 1 6548 0 // zde by se měla updatem přepsat 1 protože číslo už v tabulce je a má už jedničku Takže potřebuji udělat aby se přepsala 0 na 1 pokud v Text už shodné číslo má 1. Díky za radu. |
||
Kajman Profil |
#2 · Zasláno: 15. 6. 2015, 09:11:37
Jakou používáte databázi?
|
||
Michales Profil |
#3 · Zasláno: 15. 6. 2015, 09:22:11
Kajman:
Mysql |
||
Kajman Profil |
Asi půjde něco takového...
UPDATE tabulka t0 JOIN tabulka t1 ON t0.text = t1.text AND t1.t_id = 1 SET t0.t_id = 1 WHERE t0.t_id = 0 |
||
Kubo2 Profil |
#5 · Zasláno: 15. 6. 2015, 11:07:27
Kajman:
Mohol by som ťa poprosiť o trochu názornejší popis toho dotazu? Akosi som sa v tom začal strácať... Vďaka. |
||
Kajman Profil |
Kubo2:
A obdobnému select dotazu k nalezení řádků, co se mají měnit, rozumíš? SELECT * FROM tabulka t0 JOIN tabulka t1 ON t0.text = t1.text AND t1.t_id = 1 WHERE t0.t_id = 0 |
||
Michales Profil |
#7 · Zasláno: 15. 6. 2015, 17:35:54
Kajman:
Ahoj, díky za pomoc. Tvůj dotaz by asi i mohl fungovat, ovšem nepřelouská 140 tisíc řádků. Trvá mu to dlouho a nakonec spadne. |
||
juriad Profil |
#8 · Zasláno: 15. 6. 2015, 17:40:15
Michales:
Jaké indexy máš na té tabulce? Jak vypadá explain dotazu? |
||
Michales Profil |
#9 · Zasláno: 15. 6. 2015, 17:49:32 · Upravil/a: Michales
juriad:
Bohužel teď nic nezjistím, ikdyž zavřu prohlížeč a následně ho znovu spustím a najedu do myadminu tak se nic neděje(jen stále načítá), řekl bych že to stále šrotí ten dotaz :-( juriad: |
||
Kajman Profil |
#10 · Zasláno: 15. 6. 2015, 18:56:03
Michales:
Udělej index nad sloupcem text. (Klidně i na sloupci t_id, ale s tímto sloupcem bude update možná pomalejší.) Pokud to je jednorázová akce, tak do where můžeš postupně přidávat podmínku na část tabulky... např. WHERE t0.t_id = 0 AND t0.text BETWEEN 10001 and 20000 |
||
Michales Profil |
#11 · Zasláno: 16. 6. 2015, 04:29:51
Kajman:
velice moc děkuji. Ten index výrazně pomohl. |
||
Časová prodleva: 5 dní
|
|||
Kubo2 Profil |
#12 · Zasláno: 20. 6. 2015, 22:47:58
[#6] Kajman:
Aha, ak som to správne pochopil, dvakrát si aliasneš tú istú tabulku, pričom alias t0 použiješ v hlavnom SELECT e a alias t1 v klauzuli JOIN ? Následne sa vytvorí result-set pre t0 z riadkov, ktoré majú v stĺpci t0.t_id nulu a tento result-set sa spojí na základe stĺpca text result-setu t0 a result-setu t1 s podmienkou, že z t1 sa vyberú iba riadky, ktoré majú t1.t_id rovné 1.
Mám pocit, že tomu rozumiem správne, akurát to príliš komplikujem. Alebo som niekde urobil chybu? |
||
Časová prodleva: 9 let
|
0