Autor Zpráva
peta
Profil
V podstate je to neco podobne jako ma
výpis z více tabulek / scratcher / 26.4.2009 21:40:28
ale...

Mam 3 tabulky, ktere potrebuji vzajemne propojit a dohledat k nim udaje z dalsich tabulek.
* osoby - id, stud_id, stav, id_program
* studenti - id
* studenti v roce - stud_id
x programy - id, nazev, typ_studia
x zkratky - zkratka (typ_program), vyznam
Jedna se o potvrzeni o studiu.
Potrebuji vypsat studenta, ktery ma stav = 'studuje'

studenti.id = osoby.id & studenti.stud_id = studenti_v_roce.stud.id & osoby.stav = 'studuje'

student = osoby.prijmeni, osoby.jmeno, oso...

program = programy.nazev z osoby.id_program = programy.id
(informatika)

typ_studia = programy.typ_studia z osoby.id_program = programy.id a k tomu dohledat zkratky.vyznam z programy.typ_studia = zkratky.zkratka
(bakalarske, magisterske, doktorske)

a tak podobne to potrebuji pro dalsi 4 zkratky :)

Ten sql vypada takto nejak podobne, ale s tim LEFT mi to nejde.
SELECT a.os_cislo,
d.FAKULTA_SP AS s_fakulta,
-- d.cisp_kod AS s_program,
d.CZ_NAZEV AS s_program,
-- e.rv_abbreviation AS s_typ,
-- d.forma AS s_forma,
e.RV_MEANING AS s_typ,
f.RV_MEANING AS s_forma,
c.standard_rok AS s_rocnik,
b.prijmeni AS os_prijmeni,
b.jmeno AS os_jmeno,
b.TITUL_PRED AS os_titul1,
b.TITUL_ZA AS os_titul2,
b.DATUM_NAROZ AS nar_datum,
b.OKRESIDNO_NARO AS nar_okres_id,
b.MISTO_NAR_CIZI AS nar_misto,
b.STATIDNO_NARO AS nar_stat_id,
b.ULICE AS bydl_ulice,
b.OBEC_CIZI AS bydl_obecx,
b.PSC_CIZI AS bydl_pscx,
b.PSC_BYDL AS bydl_psc,
b.POSTA_CIZI AS bydl_postax,
b.OKRES_CIZI AS bydl_okresx,
b.OKRESIDNO_BYDL AS bydl_okres_id,
b.STATIDNO_BYDL AS bydl_stat_id
FROM
studenti a,
osoby b,
studenti_v_roce c,
studijni_programy d,
LEFT JOIN cg_ref_codes e ON TO_CHAR(d.typ) = e.RV_LOW_VALUE AND e.rv_domain = 'TYP_OBORU',
LEFT JOIN cg_ref_codes f ON TO_CHAR(d.forma) = f.RV_LOW_VALUE AND f.rv_domain = 'FORMA_OBORU'
WHERE
a.osobidno = b.osobidno AND
a.os_cislo = c.os_cislo AND

a.stpridno = d.stpridno AND
-- d.typ = e.rv_low_value AND

a.stav = 'S' AND
a.os_cislo LIKE 'AAA%'
GROUP BY
a.os_cislo,
d.FAKULTA_SP,
d.cisp_kod,
d.CZ_NAZEV,
-- e.rv_abbreviation,
-- d.forma,
e.RV_MEANING,
f.RV_MEANING,
c.standard_rok,
b.prijmeni,
b.jmeno,
b.TITUL_PRED,
b.TITUL_ZA,
b.DATUM_NAROZ,
b.OKRESIDNO_NARO,
b.MISTO_NAR_CIZI,
b.STATIDNO_NARO,
b.ULICE,
b.OBEC_CIZI,
b.PSC_CIZI,
b.PSC_BYDL,
b.POSTA_CIZI,
b.OKRES_CIZI,
b.OKRESIDNO_BYDL,
b.STATIDNO_BYDL
Kajman_
Profil *
Ne každá databáze to zapisuje jako left join. Podle to_char asi nepoužíváte mysql, pro kterou byl předešlý příklad.
peta
Profil
Puvodni verze obsahuje pouze group, kde je jen jedna podminka na cg_ref_codes typu WHERE d.typ = e.RV_LOW_VALUE.
A je to Oracle.
LEFT JOIN to umi, jen to mam asi spatne. Takovy pokus :)

V nutnem pripade to proste vytahnu vice selecty, ale tak vim, ze ty tyhle veci ovladas a uz jsi mi parkrat poradil, treba te neco napadne :)
Kajman_
Profil *
A není to jen tím, že za d před prvním left join máte navíc čárku?
peta
Profil
Juuu :)
Diky, problem byla tamta carka a jeste jedna pred tim dalsim LEFT JOIN.
Takze v podstate jsem to vymyslel dobre, jen takova malicka chybka, to mam o to vetsi radost. Joinovani mi moc nejde a vzdycky se tomu snazim vyhnout :)

Asi bych na to prisel mit nejaky slusny debuger pro oracle databazi. PHP na oci_error totiz napsal na ty carky treba:
"tabulka nebo pohled neexistuje"
a vcil bud moudry, co tim myslel :)
Ani a kdyz to skutecne odpovida, tak nenapise promennou nebo cast kodu, ktery mu dela problemy.
Kajman_
Profil *
Jestli se připojíte do db ze svého počítače, tak zkuste např.
http://www.oracle.com/technology/products/database/sql_developer/index.html
peta
Profil
dik, na pripojeni je treba novel smejd klienta a posledne, kdyz jsem ho tu mel, tak se mi windows startovali 5 minut a to doslova.
Takze pracuji na vzdalenem serveru a pak pres php

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