» »

baze podatkov

baze podatkov

urkrajnc ::

Pozdravljeni,

Mam eno tezavo in sicer v bazi bi rad izpisal predmete katere nima določen razred.

Naprimer imam tri tabele ( Razred , Razred_has_predmet, Predmeti) tabeli sta med saboj povezani mnogo proti mnogo in zato sn moral narediti vmesno tabelo ......

In naprimer da ima prvi razred z idjem(1) predmete SLO ANG MA v tabeli Predmeti pa se imam FIZ SVZ NEM in bi jaz rad da mi izpise sam FIZ SVZ in NEM ...

Vprasujem ce obstaja kaki ukaz al kak bi napisal stavek za to ...
za vsako inforamacijo bi bil vesel ... Hvala

Ice-Heki ::

Ja pač vzameš vse predmete iz tabele Predmeti in potem greš gledat, če jih razred ima. Če jih ima - potem jih ne izpišeš, če jih nima jih pa izpišeš.

Mavrik ::

Izbereš "ime predmeta" iz predmetov, narediš naravni stik tabele s tabelo razred_has_predmet in v WHERE zapišeš pogoj, da je ID razreda enak iskanemu.

Če bi napisal točne atribute in imena tabel ter tip baze, bi ti lahko bolj natančno pomagal.
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • spremenil: Mavrik ()

urkrajnc ::

ja to tud jaz vem ... rect =) kak pa je stavek pa glih nebi vedo .. vem da je sam stavek da izpise kere predmete ima, je priblizno tak ...
SELECT pred_kra FROM predmeti,razredi,raz_pred WHERE predmeti.id=raz_pred.id_pred AND raz_pred.id_razred=razredi.id AND razredi.id=1;

kak pa si ti reok pa pojma nimam kak bi napiso =)

urkrajnc ::

Izbereš "ime predmeta" iz predmetov, narediš naravni stik tabele s tabelo razred_has_predmet in v WHERE zapišeš pogoj, da je ID razreda enak iskanemu.

Če bi napisal točne atribute in imena tabel ter tip baze, bi ti lahko bolj natančno pomagal.


CREATE TABLE razredi (
id SERIAL NOT NULL PRIMARY KEY,
ime_razred VARCHAR(5) ,
id_profesor INTEGER,
FOREIGN KEY (id_profesor ) REFERENCES profesorji(id)
);

CREATE TABLE predmeti (
id SERIAL NOT NULL PRIMARY KEY,
pred_kra VARCHAR(5) NOT NULL ,
pred_ime VARCHAR
);
CREATE TABLE raz_pred(
id SERIAL NOT NULL PRIMARY KEY,
id_razred INTEGER NOT NULL,
id_pred INTEGER NOT NULL,
FOREIGN KEY (id_razred) REFERENCES razredi(id),
FOREIGN KEY (id_pred) REFERENCES predmeti(id)
);

=) =) upam da mas vse ;)

Mavrik ::

Glej, pri takih stvareh je najboljše delati po korakih.

Najprej zlepiš skupaj tabeli raz_pred in predmeti, da boš mel združene vse podatke, na katere se moraš nanašati. To narediš z naravnim stikom (kako točno stvar dela preizkusi):

 SELECT * FROM raz_pred, predmeti WHERE raz_pred.id_pred = predmeti.id 


Zdaj ko enkrat maš te stvari zlepljene skupaj, moraš dodati še pogoj, da ti izpiše samo še iskani razred:

 SELECT * FROM raz_pred, predmeti WHERE raz_pred.id_pred = predmeti.id AND raz_pred.id_razred = <tvoj ID razreda> 


Zdaj še pa samo spremeniš stavek tako, da boš dobil samo imena predmetov in nič drugega:

 SELECT predmeti.pred_ime FROM ... 


Pa je. Možno je sicer da tile stavki ne bodo direktno delali, ker pišem z glave in ene stvari so mal različne od DBMSja do DBMSja. Samo to je to.
The truth is rarely pure and never simple.

urkrajnc ::

ja sam to izpise vse predmete katere ime dolocen ( id ) razred ... jaz pa bi rad naprimer katere NIMA...
naprimer da ima 4.a ki ima razred SLO ANG MA
v tabeli predmeti pa so predmeti: SLO ANG MA FIZ NEM KEM SVZ PRA ... dosti vglavnem, in bi rad da bi izpise vse razen tistih tri kot so v totem primeru SLO ANG MA ....

Mavrik ::

Aja, narobe razumel nalogo. V bistvu kar moraš potem narediti je samo naslednje: dobiti vse predmete in od njih odšteti vse predmete, ki jih ima razred.

Začneš tako:
SELECT DISTINCT predmeti.pred_ime FROM raz_pred, predmeti WHERE raz_pred.id_pred = predmeti.id   


Tole ti naredi seznam vseh predmetov brez podvajanj. Odštevanje načeloma zahteva iste stolpce na obeh straneh, zato moraš narediti tudi join zraven.

Potem pa rečeš

MINUS
SELECT predmeti.pred_ime FROM ...


Torej zgornji SQL stavek, ki poišče vse predmete določenega razreda.
The truth is rarely pure and never simple.

frudi ::

Poskusi:
select p.*
from predmeti as p left join
     raz_pred as rp on p.id = rp.id_pred and rp.id_razred = @idRazred
where rp.id_pred is null
ali pa:
select *
from predmeti as p
where not exists(
             select null
             from raz_pred as rp
             where p.id = rp.id_pred and rp.id_razred = @idRazred)


V obeh primerih predstavlja @idRazred tvoj razred, za katerega iščeš predmete (ki jih ta razred nima).

Če kateri od teh selectov vrne to, kar želiš (ne dam roke v ogenj, ker se mi ne da testirat in pišem na pamet), nato vprašaj še za razlago (če jo rabiš).
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)

urkrajnc ::

Poskusi:
select p.*
from predmeti as p left join
     raz_pred as rp on p.id = rp.id_pred and rp.id_razred = @idRazred
where rp.id_pred is null
ali pa:
select *
from predmeti as p
where not exists(
             select null
             from raz_pred as rp
             where p.id = rp.id_pred and rp.id_razred = @idRazred)


V obeh primerih predstavlja @idRazred tvoj razred, za katerega iščeš predmete (ki jih ta razred nima).

Če kateri od teh selectov vrne to, kar želiš (ne dam roke v ogenj, ker se mi ne da testirat in pišem na pamet), nato vprašaj še za razlago (če jo rabiš).



=) ammm ko sn ze mislo obupat nad tem primeru mi je le nekak ratalo ja .. da mi izpise prav .. drugac vzel sn kar prvi primer ko si ga napisal pa mi dela pravilno ja ... tak da sn ti full hvalezen za to, ki mi bo full pomagalo ker mam se en primer tak, sam da je pac za profesore, vendar bom ze probal sam toti primer resit ;) glavno da mam jaz priblizno smernice dane, ki v sql nismo niti 5% delali na tem .. tak da ja hvala se enkrat ja ....


Vredno ogleda ...

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

Podatkovne baze - SQL enostavne poizvedbe

Oddelek: Programiranje
71935 (1528) galu
»

Matura 2 predmet E-redovalnica

Oddelek: Programiranje
101372 (1006) FiR3F0X
»

[sql] problem

Oddelek: Programiranje
8669 (551) tx-z
»

[Access 2007]

Oddelek: Programiranje
132544 (2144) urosz
»

namizna aplikacija v javi

Oddelek: Programiranje
371787 (1300) urosz

Več podobnih tem