Autor | Zpráva | ||
---|---|---|---|
peta Profil |
#1 · Zasláno: 27. 4. 2009, 15:04:01
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 * |
#2 · Zasláno: 27. 4. 2009, 15:23:55
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 |
#3 · Zasláno: 27. 4. 2009, 15:50:15
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 * |
#4 · Zasláno: 27. 4. 2009, 15:53:04
A není to jen tím, že za d před prvním left join máte navíc čárku?
|
||
peta Profil |
#5 · Zasláno: 28. 4. 2009, 07:51:54
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 * |
#6 · Zasláno: 28. 4. 2009, 08:22:55
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 |
#7 · Zasláno: 29. 4. 2009, 08:01:29
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 |
||
Časová prodleva: 15 let
|
0