» »

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

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??

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
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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL rabim pomoč

Oddelek: Programiranje
7947 (782) jack968
»

SQL query za datume, ki se ne prekrivajo

Oddelek: Programiranje
212139 (1770) omnimint
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211474 (958) Mitja Bonča
»

SQL poizvedba

Oddelek: Programiranje
151979 (1489) borchi
»

Access in malo večja baza

Oddelek: Programska oprema
7904 (799) |Luka|

Več podobnih tem