Autor Zpráva
Michales
Profil
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
Díky za pomoc.
juriad
Profil
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0