Autor | Zpráva | ||
---|---|---|---|
Michales Profil |
#1 · Zasláno: 9. 1. 2016, 11:01:28
Ahoj všem.
Prosím o pomoc s dotazem do db. Jde o toto: Mám sloupec Text kde jsou čísla, a sloupec Composer kde jsou jména skladatelů. Potřeboval bych když jsou v Text stejná čísla (např. 3 shodná čísla, tzn., 3 řádky v db) a jen u jednoho řádku je název skladatele v Composer sloupci aby mi to doplnilo název skladatel i do zbývajících dvou řádků se shodným číslem(Text). Napadlo mě něco takového: Ale nezdá se to být správně, protože to neudělá to co potřebuji. UPDATE songs t0 JOIN songs t1 ON t0.text = t1.text AND t1.Composer != NULL SET t0.Composer = t1.Composer WHERE t0.Composer = NULL |
||
juriad Profil |
#2 · Zasláno: 9. 1. 2016, 11:10:52
Porovnání s NULL se provádí operátorem IS NULL nebo IS NOT NULL, nikoli = případně !=. Jinak mi přijde ten dotaz správný.
Viz dev.mysql.com/doc/refman/5.7/en/working-with-null.html |
||
Michales Profil |
Zdá se že funkční zápis je tento:
UPDATE songs t0 JOIN songs t1 ON t0.text = t1.text AND t1.Composer IS NOT NULL SET t0.Composer = t1.Composer WHERE t0.Composer ='' juriad: Jj po té jsem si vzpoměl. :-) |
||
juriad Profil |
#4 · Zasláno: 9. 1. 2016, 11:12:13
Musíš vědět sám, jestli máš ve sloupci Composer '' (prázdný řetězec) nebo NULL. Prázdný řetězec je regulérní hondota, NULL je informace, že hodnota neexistuje.
|
||
Michales Profil |
#5 · Zasláno: 9. 1. 2016, 11:13:29
juriad:
Sloupec neobsahuje NULL, obsahuje prázdný řetězec. Ale jak píši výše uvedený dotaz, se zdá být funkční. |
||
mimochodec Profil |
#6 · Zasláno: 9. 1. 2016, 11:15:30
Jestli dobře pamatuju, "text" jako název sloupce sice použit být může, ale v dotazech se pak musí speciálně ošetřit. Doporučuju nepoužívat.
|
||
juriad Profil |
mimochodec:
text je klíčové slovo, ale není rezervované. S doporučením souhlasím spíše z důvodu existence hloupých editorů, které budou toto slovo zvírazňovat a plést tak uživatele. Michales: Ale on je spíš problém s návrhem té databáze. Je blbost pojmenovávat sloupec obsahující čísla „text“. Navíc z pohledu normálních forem je chybou kopírovat nějakou informaci a udržovat ji na několika místech. Raději měla vzniknout tabulka skladatelů, která by obsahovala id (tedy to, co je nyní ve sloupci „text“) a jeho jméno (to, co je ve sloupci „Composer“). Tímto by ubyl jeden sloupec z tabulky songs a jméno skladatele by se doplňovalo až při SELECTu pomocí JOINu. Ale je možné, že sloupec „text“ je nějaký pokus o hybrida, který v různých situacích obashuje různé informace, což je také špatně. |
||
Michales Profil |
#8 · Zasláno: 9. 1. 2016, 12:31:13
juriad:
Odkážu tě na související téma už několik měsíců staré. Diskuse JPW: Návrh databáze Takže tato tabulka už má návaznost na další dvě tabulky. Nechci zase další tabulku, a tím pádem předělávat zase zápis do databáze. |
||
Časová prodleva: 9 let
|
0