Forum » Programiranje » podatkovna baza
podatkovna baza
scarymovie ::
Pozdravljeni,
Imam, eno vprašanje pri pisanju sql stavkov.
Imam tabele Zapornik(ID_Zapornik, Ime, Priimek), Prekrski(ID_prekrski, vrsta_prekrska, Zap_ID_Zapornik) in Kazen(ID_kazen, datum_trajanja, Pre_ID_Prekrsek)
Tabela Prekrski imaj tuji ključ Zap_ID_Zapornik, Kazen pa Pre_ID_Prekrsek.
Bazo ustvarjam v Oraclu. Težavo pa imam pri pisanju naslednjega sql stavka:
Katere prekrske prestaja kazen Matej Nezic in kdaj bo izpuscen.
V tabelah imam vrednosti:
ZAPORNIK:
(1, 'Matej', 'Nezic')
PREKRSKI:
(1, kraja, 1)
(2, groznje, 1)
KAZEN:
(1, '12.04.2007', 1)
(2, '14.08.2010', 2)
SQL stavek sem napisal tako:
SELECT PREKRSEK.VRSTA, MAX(KAZEN.DATUM_TRAJANJA) AS DATUM_IZPUSTITVE
FROM PREKRSEK JOIN KAZEN
ON PREKRSEK.ID_PREKRSEK=KAZEN.PRE_ID_PREKRSEK
JOIN ZAPORNIK ON ZAPORNIK.ID_ZAPORNIK=PREKRSEK.ZAP_ID_ZAPORNIK
GROUP BY PREKRSEK.VRSTA
WHERE ZAPORNIK.IME='Matej' AND ZAPORNIK.PRIIMEK='Nezic';
Tezava je pa v tem, ker želim izpisati prekrske in datum izpustitve za osebo Matej Nežič
Prekrskov je več, datum izpustitve pa je tisti datum (v tabeli kazen, atribut datum_do), ki je
največji MAX (ker predvidevam da je bial dana oseba zaprta že nekje v preteklosti, medtem je osebi pretekla
kazen, ki je trajala do leta 2007, odslužiti pa še mora kazen, ki traja do leta 2010).
Skratka zelim izpisati naslednje:
Vrsta_prekrska datum_izpustitve
---------------------------------------
kraja 14.08.2010
groznja
Lepo bi prosil, či bi mi kdo pogledal navedeni sql stavek in mi ga popravil, da bi ustrezal zgoraj navedenemu izpisu.
Hvala
Lep pozdrav
Imam, eno vprašanje pri pisanju sql stavkov.
Imam tabele Zapornik(ID_Zapornik, Ime, Priimek), Prekrski(ID_prekrski, vrsta_prekrska, Zap_ID_Zapornik) in Kazen(ID_kazen, datum_trajanja, Pre_ID_Prekrsek)
Tabela Prekrski imaj tuji ključ Zap_ID_Zapornik, Kazen pa Pre_ID_Prekrsek.
Bazo ustvarjam v Oraclu. Težavo pa imam pri pisanju naslednjega sql stavka:
Katere prekrske prestaja kazen Matej Nezic in kdaj bo izpuscen.
V tabelah imam vrednosti:
ZAPORNIK:
(1, 'Matej', 'Nezic')
PREKRSKI:
(1, kraja, 1)
(2, groznje, 1)
KAZEN:
(1, '12.04.2007', 1)
(2, '14.08.2010', 2)
SQL stavek sem napisal tako:
SELECT PREKRSEK.VRSTA, MAX(KAZEN.DATUM_TRAJANJA) AS DATUM_IZPUSTITVE
FROM PREKRSEK JOIN KAZEN
ON PREKRSEK.ID_PREKRSEK=KAZEN.PRE_ID_PREKRSEK
JOIN ZAPORNIK ON ZAPORNIK.ID_ZAPORNIK=PREKRSEK.ZAP_ID_ZAPORNIK
GROUP BY PREKRSEK.VRSTA
WHERE ZAPORNIK.IME='Matej' AND ZAPORNIK.PRIIMEK='Nezic';
Tezava je pa v tem, ker želim izpisati prekrske in datum izpustitve za osebo Matej Nežič
Prekrskov je več, datum izpustitve pa je tisti datum (v tabeli kazen, atribut datum_do), ki je
največji MAX (ker predvidevam da je bial dana oseba zaprta že nekje v preteklosti, medtem je osebi pretekla
kazen, ki je trajala do leta 2007, odslužiti pa še mora kazen, ki traja do leta 2010).
Skratka zelim izpisati naslednje:
Vrsta_prekrska datum_izpustitve
---------------------------------------
kraja 14.08.2010
groznja
Lepo bi prosil, či bi mi kdo pogledal navedeni sql stavek in mi ga popravil, da bi ustrezal zgoraj navedenemu izpisu.
Hvala
Lep pozdrav
- premaknil iz Pomoč in nasveti: bluefish ()
LeQuack ::
Nekaj podobnega, nisem testiral:
SELECT PREKRSEK.VRSTA, MAX(KAZEN.DATUM_TRAJANJA) AS DATUM_IZPUSTITVE FROM PREKRSEK INNER JOIN ZAPORNIK ON ZAPORNIK.ID_ZAPORNIK=PREKRSEK.ZAP_ID_ZAPORNIK LEFT JOIN KAZEN ON PREKRSEK.ID_PREKRSEK=KAZEN.PRE_ID_PREKRSEK AND KAZEN.DATUM_TRAJANJA= (SELECT MAX(DATUM_TRAJANJA) FROM KAZEN k, PREKRSEK p, ZAPORNIK z WHERE p.ID_PREKRSEK=k.PRE_ID_PREKRSEK AND z.ID_ZAPORNIK=p.ZAP_ID AND z.IME='Matej' AND z.PRIIMEK='Nezic') WHERE ZAPORNIK.IME='Matej' AND ZAPORNIK.PRIIMEK='Nezic' GROUP BY PREKRSEK.VRSTA;
Quack !
scarymovie ::
Pozdravljeni
imam eno vprašanje glede sql stavka
imam entiteto zapornik (id_zapornik, ime ,priimek) in izhod (id_izhod, datum_od, datum_do, zap_id_zapornik)
želim pa iszpsati vse osebe ki so bile na izhodu na datum 25.10.2005
jaz sen napisal sql tako:
SELECT IME, PRIIMEK
FROM ZAPORNIK, IZHOD
WHERE ID_ZAPORNIK = ZAP_ID_ZAPORNIK
AND '25.10.2005' BETWEEN (SELECT MIN(DATUM_OD) FROM IZHOD)
AND (SELECT MAX(DATUM_DO) FROM IZHOD);
vendar mi ne izpiše pravilno, ker izpiše vse.
Kako bi bilo pravilno napisano da bi dobil samo tisto osebo ki je bila na izhodu 25.10.2005??
imam eno vprašanje glede sql stavka
imam entiteto zapornik (id_zapornik, ime ,priimek) in izhod (id_izhod, datum_od, datum_do, zap_id_zapornik)
želim pa iszpsati vse osebe ki so bile na izhodu na datum 25.10.2005
jaz sen napisal sql tako:
SELECT IME, PRIIMEK
FROM ZAPORNIK, IZHOD
WHERE ID_ZAPORNIK = ZAP_ID_ZAPORNIK
AND '25.10.2005' BETWEEN (SELECT MIN(DATUM_OD) FROM IZHOD)
AND (SELECT MAX(DATUM_DO) FROM IZHOD);
vendar mi ne izpiše pravilno, ker izpiše vse.
Kako bi bilo pravilno napisano da bi dobil samo tisto osebo ki je bila na izhodu 25.10.2005??
scarymovie ::
zigam
SELECT IME, PRIIMEK
FROM ZAPORNIK, IZHOD
WHERE ID_ZAPORNIK = ZAP_ID_ZAPORNIK AND IZHOD.datum_do='25.10.2005' ?
če prou razumm maš v tabeli izhod notr datum kdaj je pršu v zapor in kdaj je šu iz zapora? Edin pol nima ta tabela nekak logičnga imena; al kako nej bi to blo mišlen?
Tole je mišleno tako, da imam v tabeli Izhod izhoda od kdaj (datum_od) in do kdaj (datum_do) je bil nek zapornk izven zapora (npr. so mo dovolili da je obiskal družino na domu). Kar pa pomeni da je nek zapornik dobil izhod npr. datum_od='22.10.2005' do datum_do='27.10.2005' pol je bil tale zapornik na porstosti 25.10.2005. V glavnem želim napisati tako, da se preverijo vsi zaporniki, če so mogoče bili na ta datum na prostosti.
LeQuack ::
scarymovie je izjavil:
Pozdravljeni
imam eno vprašanje glede sql stavka
imam entiteto zapornik (id_zapornik, ime ,priimek) in izhod (id_izhod, datum_od, datum_do, zap_id_zapornik)
želim pa iszpsati vse osebe ki so bile na izhodu na datum 25.10.2005
jaz sen napisal sql tako:
SELECT IME, PRIIMEK
FROM ZAPORNIK, IZHOD
WHERE ID_ZAPORNIK = ZAP_ID_ZAPORNIK
AND '25.10.2005' BETWEEN (SELECT MIN(DATUM_OD) FROM IZHOD)
AND (SELECT MAX(DATUM_DO) FROM IZHOD);
vendar mi ne izpiše pravilno, ker izpiše vse.
Kako bi bilo pravilno napisano da bi dobil samo tisto osebo ki je bila na izhodu 25.10.2005??
Nekako tako:
SELECT DISTINCT z.IME, z.PRIIMEK FROM ZAPORNIK z, IZHOD i WHERE z.ID_ZAPORNIK = i.ZAP_ID_ZAPORNIK AND i.DATUM_OD <= TO_DATE('25.10.2005', 'dd.mm.yyyy') AND i.DATUM_DO >= TO_DATE('25.10.2005', 'dd.mm.yyyy');
Quack !
Zgodovina sprememb…
- spremenil: LeQuack ()
scarymovie ::
hvala LeQuack
sem uredil in deluje.
Vprašal bi vas samo še to kar ste mi včeraj napisali pri tistem prvem vprašanju o prekrskih
sem preizkusil pa mi javi sql javi napako:
ERROR at line 1:
ORA-01799: a column may not be outer-joined to a subquery
še enkrat hvala, ker mi pomagate
sem uredil in deluje.
Vprašal bi vas samo še to kar ste mi včeraj napisali pri tistem prvem vprašanju o prekrskih
01.SELECT PREKRSEK.VRSTA, MAX(KAZEN.DATUM_TRAJANJA) AS DATUM_IZPUSTITVE
02.FROM PREKRSEK
03.INNER JOIN ZAPORNIK ON ZAPORNIK.ID_ZAPORNIK=PREKRSEK.ZAP_ID_ZAPORNIK
04.LEFT JOIN KAZEN ON PREKRSEK.ID_PREKRSEK=KAZEN.PRE_ID_PREKRSEK AND KAZEN.DATUM_TRAJANJA=
05. (SELECT MAX(DATUM_TRAJANJA)
06. FROM KAZEN k, PREKRSEK p, ZAPORNIK z
07. WHERE p.ID_PREKRSEK=k.PRE_ID_PREKRSEK AND z.ID_ZAPORNIK=p.ZAP_ID AND z.IME='Matej' AND z.PRIIMEK='Nezic')
08.WHERE ZAPORNIK.IME='Matej' AND ZAPORNIK.PRIIMEK='Nezic'
09.GROUP BY PREKRSEK.VRSTA;
sem preizkusil pa mi javi sql javi napako:
ERROR at line 1:
ORA-01799: a column may not be outer-joined to a subquery
še enkrat hvala, ker mi pomagate
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL rabim pomočOddelek: Programiranje | 1143 (978) | VelikiJanez |
» | SQL query za datume, ki se ne prekrivajoOddelek: Programiranje | 2610 (2241) | omnimint |
» | Statistika dijakov, pomocOddelek: Programiranje | 1783 (1267) | Mitja Bonča |
» | SQL poizvedbaOddelek: Programiranje | 2164 (1674) | borchi |
» | Access in malo večja bazaOddelek: Programska oprema | 1070 (965) | |Luka| |