Autor Zpráva
xxxx
Profil *
ahoj,

SQL se teprve učím a nyni stojím před problémem:

Mám dvě tabulky (mesice as m,svatky as s) ve vztahu 1:N,

1. PK jsou m.MESIC_ID, m.OSOBA_ID, s.ID_MESIC, s.ID_OSOBA, dále existuje sloupec s.SVATEK
2. sloupce s.ID_OSOBA obsahuje bud unikátni čislo osoby, anebo konstantu (napr. 0)

Tou konstantou chci definovat stav, že daný svátek je pro všechny osoby, to lze vsak prekryt - personalizovat na osobu tim, že tam bude ID_OSOBY > 0.
A tim vznikne pro daný den dalši řadek, kt. je navazan na konkretni osobu

Stojim pred návrhem database - popisuje danou situaci tento model db dobře?,

Jak bude vypadat select, v kt. chci uprednostnit vracenim personalizovaneho svatku, pred defaultnim?
    select m.MESIC_ID, m.OSOBA_ID,  s.ID_MESIC, s.ID_OSOBA,  s.SVATEK 
         from mesice as m, svatky as s
         where ??? IF(m.OSOBA_ID = s.ID_OSOBA)  m.OSOBA_ID = s.ID_OSOBA ???
                    ??? ELSE s.ID_OSOBA = 0 ???
         m.MESIC_ID = s.ID_MESIC


Jinak muzete mi event. poradit jaky danou situaci modelovat v db?

diky

tomas
Alphard
Profil
co třeba spojit tabulky s left join?
ve sloupci osoba poptom bude buď osoba nebo NULL a vyfiltruje se where osoba is NULL, resp. where osoba is not NULL
xxxx
Profil *
@Alphard

diky za reakci, mrknul sem na to.... je toto reseni?


 
         select MESIC_ID, OSOBA_ID,  ID_MESIC, ID_OSOBA,  SVATEK 
             from svatky left join mesice on OSOBA_ID = ID_OSOBA
   
         select MESIC_ID, OSOBA_ID,  ID_MESIC, ID_OSOBA,  SVATEK 
             from mesice right join svatky on OSOBA_ID = ID_OSOBA


Snad jen lze to resit i jinak, existuje i jine reseni?
Kajman_
Profil *
co v původním dotazu dát podmínku
where (m.OSOBA_ID = s.ID_OSOBA or s.ID_OSOBA=0) and m.MESIC_ID = s.ID_MESIC
?
xxxx
Profil *
Diky za rady... obe dve reseni jsou fci...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0