SQL - prepojenie tabuliek
Zdravím, potrebovala by som pomôcť pri prepájaní tabuliek.
Mám tabuľky vyrobca, liek a diagnoza, ktore spajam v tabuľke info. Problém je, že niektorý výrobca lieky nemá alebo nie na všetky diagnózy sú lieky, a tak je tam hodnota NULL. Tá tam však byť nemôže, keďže je to primary key. Neviete mi niekto poradiť ako to mám vyriešiť?
Ďakujem.
Co znamená, že je spojuješ v tabulce info?
Znamená to, že mám kvázi 3 nezávislé tabuľky, ktoré potrebujem prepojiť .. a prepájam to tak, že v každej tabuľke mám nejaký primary key.. a tie sú potom v tabuľke info.
Ale to propojení nemáš mít v nějaké tabulce. Propojení definuješ pomocí klíčů.
Nás učia, že to máme mať v tabuľke, ja iné riešenie neviem.. ale rada sa dozviem o inom.
Tak to jsi to buď špatně pochopila a nebo spíš špatně píšeš, čeho chceš vlastně dosáhnout.
Nás učia robiť všetko ako je to v tejto fyzickej schéme autoservisu. Sú tam 3 tabuľky, prepojené v jednej. A ja robím to isté, len miesto auto, sluzba, zamestnanec mám vyrobca, liek, diagnoza .. a asz sa u mňa volá info.
Už je to pochopiteľné?
Ale tam ta třetí tabulka nese nějakou informaci. Jakou informaci nese ta tvoje tabulka info?
Pôvodne niesla.. ale už nenesie.
Takže v podstate by som to mohla spraviť tak, že v tabuľke DIAGNOZA budem mať stĺpce: kod_diagnozy, id_diagnozy, diagnoza a id_lieku????
Ale potom ako mám nakresliť k tomu schému?
Ne. Budeš mít tabulky Vyrobce, Lek, Diagnoza a spojovací tabulku LeciDiagnozu, která ti rozloží vztah M:N mezi tabulkami Lek a Diagnoza na dva vztahy 1:N.
Takže v tabuľke DIAGNOZA bude id_diagnozy ako primary a id_lieku ako primary key?
V LIECI_DIAG bude diagnoza a id_diagnozy ako foreign key a id_lieku ako foreign key?
Ne. Diagnoza bude mít pouze primární klíč, Lék bude mít primární klíč a cizí klíč na tabulku Výrobce. LéčíDiagnózu bude mít cizí klíče na obě předchozí tabulky, které dohromady můžou tvořit primární klíč.
Takže si píšem
DIAGNOZA: id_diagnoza <pk>
LIEK: id_lieku <pk>
id_vyrobcu <fk>
LIECI_DIAG: id_diagnoza <fk1>
id_lieku <fk2>
..ak už toto chápem zle, tak ma môžete prísť zabiť alebo zaživa upáliť.
Ano.
Dobre, problém som vyriešila, ale rozhasilo mi to celú tabuľku.
Kde bude zadávať teraz názov diagnózy? v LIECI_DIAG?
A všetky info o lieku budú v LIEK.. všetky info o Výrobcovi vo VYROBCA .. inak aký vzťah majú VYROBCA a LIEK?
Název diagnózy logicky do tabulky Diagnozna.
Jaký asi může mít výrobce a lék vztah? Výrobce vyrábí lék.
Aká je štruktúra tabuliek, ako vyzerá Tvoj SQL dopyt?
Šlo by sem vložit strukturu tabulek a jakým SELECTem vybíráš data?
SQL je konkrétně jaký? MySQL, MS SQL, Postgre SQL, SQLite, ...
Dáta len vkladám, nevyberám.
SQL je najzákladnejší aký môže byť.
Tak teda bohužel ani jedné tvé odpovědi nerozumím.
Co je nejzákladnější SQL? Snad má ta databáze nějaký název, ne? Syntaxe jednotlivých DB se totiž liší.
Když jen vkládáš data, není mi jasné, jak je "spojuješ" v tabulce info. Data by se měla vkládat do samostatných tabulek (vyrobca, liek a diagnoza), tzv. číselníky a potom data vybereš (spojíš) SELECTem.
SQLplus
Každý stĺpec v tom .pdf je u mňa samostatná tabuľka.. a ja z toho robím tie riadky.. či ani to nie je jasné. Ja sa neviem vyjadrovať.. a hlavne nie pri veciach, ku ktorým nemám vzťah a chuť ich robiť.
Konkrétne toto potrebujem spraviť.
A zatiaľ mám:
pokud spojuješ tabulky na sloupci, kde na nějaké straně je hodnota NULL a ty ten řádek chceš pak máš navýběr následující slova a typy spojení:
a left join b on (a.i=a.b) - všecno v áčku, i když to nemá v béčku záznam
a right join b on (a.i=a.b) - všechno v béčku i když to v á nemá záznam
a full outer join b on (a.i=b.i) - všechno z obou tabulek
-- a nebo pro oracle lepší quotace:
select * from a,b where a.i=b.i(+)
select * from a,b where a.i(+)=b.i
a samozřjmě fungují i operátory typu = OR a.i IS NULL.
Musíš použít typ spojení, který dovolí nemít relaci pro obraz řádku v druhé tabulce, a od toho je LEFT, RIGHT join (at již normálním či zkráceným zápisem (+) na oracle)