[ Milos Sreckovic @ 11.01.2006. 12:39 ] @
imam tabelu 'saradnici' i polja 'sifrs' i 'ime' i tabelu 'radi_ponudu' sa poljima 'sifrs'(saradnik koji radi) i 'sifrpo'(ponuda koja se radi). kako da izvucem sve saradnike koji ne rade monudu? znam da nadjem sve koji rade, jel moze to da se oduzme od svih saradnika ili tako nesto?
[ Fedya @ 11.01.2006. 12:44 ] @
WHERE SifPo IS NULL????
[ Milos Sreckovic @ 11.01.2006. 13:02 ] @
U tabeli 'radi ponudu' je primarni kljuc(sifrs,sifrpo), tako da ni u kom slucaju ne moze biti NULL. Ta tabela predstavlja ovu stvar, ako postoji red onda saradnik sa sifrom sifrs radi sifrpo, a ako ne postoji takva onda on ne radi tu ponudu.
[ Fedya @ 11.01.2006. 13:07 ] @
Ne razumem sta hoces da uradis. Napisi upit koji "vraca sve koji rade".
[ jablan @ 11.01.2006. 13:12 ] @
...WHERE sifrs NOT IN (SELECT sifrs FROM radi_ponudu)
[ japan @ 11.01.2006. 13:15 ] @
Code:
select * from saradnici where sifrs not in (select distinct sifrs from ponude)
[ japan @ 11.01.2006. 13:17 ] @
pretece me jablan
[ Fedya @ 11.01.2006. 13:19 ] @
Cekajte ljudi, hocete da kazete da je on hteo da mu upit vrati sve saradnike koji imaju NEISPRAVAN sifrs tj. koji ne postoji u tabeli deteta???
Pa gde je tu referencijalni integritet???
[ Milos Sreckovic @ 11.01.2006. 13:25 ] @
Citat:
Fedya: Cekajte ljudi, hocete da kazete da je on hteo da mu upit vrati sve saradnike koji imaju NEISPRAVAN sifrs tj. koji ne postoji u tabeli deteta???
Pa gde je tu referencijalni integritet???


ne, postoje saradnici, i postoje ponude, i postoji veza (m,m) izmedju njih. Pa sam napravio tabelu 'radi ponudu(saradnik,ponuda)' i ako postoji par onda taj saradnik radi ponudu, a ako ne onda ne radi ponudu, integritet je ok.

Citat:
japan
Code:
select * from saradnici where sifrs not in (select distinct sifrs from ponude)


sta znaci "distinct"?
[ jablan @ 11.01.2006. 13:29 ] @
Citat:
Fedya: Cekajte ljudi, hocete da kazete da je on hteo da mu upit vrati sve saradnike koji imaju NEISPRAVAN sifrs tj. koji ne postoji u tabeli deteta???

Nemaju neispravan sifrs, jednostavno nisu dodeljeni nijednom projektu (ponudi, čemu god)... Takoreći slobodni su.
[ japan @ 11.01.2006. 13:31 ] @
Citat:
konj: sta znaci "distinct"?


znaci da ti nece vracati visestruke rezultate, tj "bez ponavljanja". npr ako imas:


Code:

sifrs      | sifrp
---------------------------
1          | 1
1          | 2
1          | 3

onda ce ti "select distinct sifrs" vratiti samo 1, tj jedan red, dok bi ti "select sifrs" vratio tri reda sa jedinicama
[ Milos Sreckovic @ 11.01.2006. 13:51 ] @
Citat:
jablan: Nemaju neispravan sifrs, jednostavno nisu dodeljeni nijednom projektu (ponudi, čemu god)... Takoreći slobodni su.


nije da su slobodni, ali nerade tu ponudu

Citat:
japan
Code:
select * from saradnici where sifrs not in (select distinct sifrs from ponude)


nece da radi ovaj deo 'not in (nesto)' imam mysql pod linuxom.?
[ Fedya @ 11.01.2006. 13:57 ] @
Upravo nadjoh na netu da verzije mysqla startije od verzije 4.1 ne podrzavaju ovakve upite. Koju verziju koristis?

[Ovu poruku je menjao Fedya dana 11.01.2006. u 14:58 GMT+1]
[ jablan @ 11.01.2006. 14:00 ] @
Bez podupita:
Code:

select s.sifrs
from saradnici s
left outer join ponude p on s.sifrs = p.sifrs
where p.sifrs is null
[ Milos Sreckovic @ 11.01.2006. 14:01 ] @
to je to 3.0.18, jer postoji neka alternativa ili sam prso?
mozeli nekako drugacije da se izvede onaj upit
[ Milos Sreckovic @ 11.01.2006. 14:22 ] @
Citat:
jablan: Bez podupita:
Code:

select s.sifrs
from saradnici s
left outer join ponude p on s.sifrs = p.sifrs
where p.sifrs is null


jos sad treba da se ubaci i ' p.ponuda='VVV' '

ne razum sta je uradjeno, pa ne znam ni gde da ubacim
[ jablan @ 11.01.2006. 14:32 ] @
Code:

select s.sifrs
from saradnici s
left outer join ponude p on s.sifrs = p.sifrs and p.ponuda='VVV'
where p.sifrs is null
[ Fedya @ 11.01.2006. 14:43 ] @
Mislis:
select s.sifrs
from saradnici s
left outer join ponude p on s.sifrs = p.sifrs
where p.ponuda='VVV' and p.sifrs is null
???
[ Milos Sreckovic @ 11.01.2006. 14:48 ] @
ne ide, vraca mi prazan set.

kada izbacim where ... on mi samo da polje sifrs sa svim saradnicima.

sta predatavlja 'left outer join'
[ jablan @ 11.01.2006. 14:48 ] @
Ne, mislim ono što sam napisao.

Citat:
ne ide, vraca mi prazan set.

Jesi li siguran da si dobro otkucao query i da postoje podaci koji zadovoljavaju upit?

[Ovu poruku je menjao jablan dana 11.01.2006. u 16:07 GMT+1]
[ Milos Sreckovic @ 11.01.2006. 15:58 ] @
evo pa vidi sam

Code:
mysql> select * from saradnici;
+-------+----------+---------+
| sifrs | napomena | nadimak |
+-------+----------+---------+
|     1 | NULL     | djole   |
|     2 | NULL     | mika    |
|     3 | NULL     | pera    |
|     4 | NULL     | zika    |
+-------+----------+---------+
4 rows in set (0.06 sec)

mysql> select sifrpo from ponude;
+---------+
| sifrpo  |
+---------+
|      23 |
|     111 |
|    5643 |
| 3455532 |
| 3455533 |
| 3455534 |
| 3455535 |
| 3455536 |
| 3455537 |
| 3455538 |
| 3455539 |
| 3455540 |
| 3455541 |
| 3455542 |
| 3455547 |
| 3455548 |
| 3455549 |
| 3455550 |
| 3455551 |
| 3455552 |
| 3455553 |
| 3455554 |
| 3455555 |
| 3455556 |
| 3455557 |
| 3455558 |
| 3455559 |
| 3455560 |
+---------+
28 rows in set (0.07 sec)

mysql> select * from strani_ucesnici;
+--------+----------+
| ponuda | saradnik |
+--------+----------+
|     23 |        1 |
|     23 |        2 |
|    111 |        2 |
|     23 |        3 |
+--------+----------+
4 rows in set (0.00 sec)

mysql> select sifrs from saradnici 
left outer join strani_ucesnici on saradnici.sifrs=strani_ucesnici.saradnik and strani_ucesnici.ponuda='23' 
where strani_ucesnici.saradnik=NULL;
Empty set (0.02 sec)


[Ovu poruku je menjao konj dana 11.01.2006. u 16:58 GMT+1]
[ jablan @ 11.01.2006. 16:15 ] @
Citat:
konj: evo pa vidi sam

Code:
select sifrs from saradnici 
left outer join strani_ucesnici 
on saradnici.sifrs=strani_ucesnici.saradnik and strani_ucesnici.ponuda='23' 
where strani_ucesnici.saradnik=NULL;
Empty set (0.02 sec)


IS NULL, a ne = NULL

[Ovu poruku je menjao jablan dana 11.01.2006. u 17:16 GMT+1]
[ Milos Sreckovic @ 11.01.2006. 16:43 ] @
radi hvala
[ branimir.ts @ 12.01.2006. 10:55 ] @
Prvo da krenem sa ispravkama

Citat:
jablan:
Code:
...WHERE sifrs NOT IN (SELECT sifrs FROM radi_ponudu)



..ovo bi trebalo da bude ovako :

Code:
...WHERE sifrs NOT IN (SELECT ISNULL(sifrs,'') as sifrs FROM radi_ponudu)


ili

Code:
...WHERE sifrs NOT IN (SELECT sifrs FROM radi_ponudu where sifrs is not null)


Dakle, zadatak je sledeci: Izlistati sve one saradnike koji ne ucestvuju u ponudi .

Anlagno tome, zadatak moze da se preformulise na nacin "vrati sve saradnike ciji je broj pojavljivanja u tabeli ponude (strani_ucesnici),
za odgovarajucu ponudu , jednak nuli.

Ako ovo prevedemo u SQL dobijamo sledeci upit :

Code:
SELECT *
FROM saradnici AS tmp1
WHERE 
(select count(saradnik) from strani_ucesnici tmp where tmp.saradnik = tmp1.sifrs and tmp.ponuda='23') <= 0


Pozdrav
[ jablan @ 12.01.2006. 10:58 ] @


joj
[ japan @ 12.01.2006. 11:11 ] @
Citat:
branimir.ts:
Code:
...WHERE sifrs NOT IN (SELECT ISNULL(sifrs,'') as sifrs FROM radi_ponudu)



cemu ovo ISNULL ako smem da pitam?
[ branimir.ts @ 12.01.2006. 11:34 ] @
Citat:
japan: cemu ovo ISNULL ako smem da pitam?


Iz prostog razloga jer je uvek potrebno krenuti od pretpostavke da u tabeli moze doci do pojave "gubitka referencijalnog integriteta" , tj pojaviti se polje ponuda sa odgovarajucim podatkom, a istovremeno i polje saradnik cija vrednost , iz bilo kog razloga, moze biti NULL. U tom slucaju jablanov upit nece vratiti korektne rezultate.

Pozdrav
[ Fedya @ 12.01.2006. 11:39 ] @
A kako ce to doci do pojave "gubitka referencijalnog integriteta"?
[ japan @ 12.01.2006. 11:47 ] @
a integritet entiteta?

Citat:
U tabeli 'radi ponudu' je primarni kljuc(sifrs,sifrpo)
[ branimir.ts @ 12.01.2006. 11:58 ] @
Citat:
Fedya: A kako ce to doci do pojave "gubitka referencijalnog integriteta"?


Evo jednog scenarija. Neko je importovao na MSSQL-u tabelu iz jedne baze u drugu. Zaboravio da postavi index e i primarne kljuceve, a u medjuvremenu aplikacija koja pocinje rad sa prebacenom tabelom iz nekog razloga ubaci NULL vrednost u polje saradnik (sada joj se to moze , nema constrainta, a istovremeno upise nesto u ponudu).

Ti se pojavis na licu mesta i treba sto hitnije da odradis upit. Ti ces odraditi jablanov upit i neprimetno ces dobiti (ili uopste neces dobiti ) nepotpune (ili netacne ) rezultate .

U samom programiranju vlada jedno zlatno pravilo : Uvek pokusaj da sprecis cak i ono sto se (mozda) nikada nece ni desiti . To se zove "defanzivno" programiranje i ja sam pristalica tog nacina razmisljanja.

Pozdrav
[ jablan @ 12.01.2006. 12:11 ] @
Citat:
branimir.ts: To se zove "defanzivno" programiranje i ja sam pristalica tog nacina razmisljanja.

Očigledno si pristalica i pravila "kad nemaš ništa pametno da kažeš, ti reci bilo šta".
[ Fedya @ 12.01.2006. 12:12 ] @
Ovo u svakom slucaju ne moze da se desi posto i ako stavis WITH NO CHECK primarni kljuc se ipak proverava, tako da do ovoga ne moze da dodje i verujem da je tvoja ispravka tacna ali potpuno suvisna.
[ japan @ 12.01.2006. 12:19 ] @
Citat:
branimir.ts: Evo jednog scenarija. Neko je importovao na MSSQL-u tabelu iz jedne baze u drugu. Zaboravio da postavi index e i primarne kljuceve, a u medjuvremenu aplikacija koja pocinje rad sa prebacenom tabelom iz nekog razloga ubaci NULL vrednost u polje saradnik (sada joj se to moze , nema constrainta, a istovremeno upise nesto u ponudu).

Ti se pojavis na licu mesta i treba sto hitnije da odradis upit.


moram da priznam da me ovaj scenario neodoljivo poseca na autostoperski vodic kroz galaksiju ;o)

Citat:
U samom programiranju vlada jedno zlatno pravilo : Uvek pokusaj da sprecis cak i ono sto se (mozda) nikada nece ni desiti . To se zove "defanzivno" programiranje i ja sam pristalica tog nacina razmisljanja.


uvek? cak i kad je verovatnoca da se desi to sto pokusavas da predvidis jednaka nuli, a lek koji primenjujes kosta boga oca? da budem plastican, ides li ti na terapijska zracenja samo zato sto postoji mogucnost da imas neotkriven malignitet?
[ branimir.ts @ 12.01.2006. 12:58 ] @
Citat:
japan: uvek? cak i kad je verovatnoca da se desi to sto pokusavas da predvidis jednaka nuli, a lek koji primenjujes kosta boga oca? da budem plastican, ides li ti na terapijska zracenja samo zato sto postoji mogucnost da imas neotkriven malignitet?


Vidim da si poceo da butas babe i zabe i cela ova tvoja prica izlazi iz smislenog konteksta. Verovatnoca nikada nije jednaka 0 ( mozda je tvoje iskustvo sa ovakvim stvarima samo jednako nuli ) , a "lek koji kosta boga oca" je zanemarljiva cena (ako si mislio na performanse konkretno ) . Sto vise budes razmisljao na taj nacin, veca ces stetocina biti za svoje preduzece i vece ce ti biti sanse za otkaz.

Citat:
jablan: Očigledno si pristalica i pravila "kad nemaš ništa pametno da kažeš, ti reci bilo šta".


Ti bi trebalo jos jednom da prelistas osnove SQL a, i da naucis jos poneki kako ti kazes "fazon", a ne da non stop krparis sa nekim view ima , LEFT JOINIMA itd i da radis stvari iz 100 koraka umesto jednog.

Pozdrav
[ jablan @ 12.01.2006. 13:04 ] @
Bez tebe bi ovaj forum bio, ako ništa drugo, manje zanimljiv.

Izvoli, reši čoveku problem bez OUTER JOIN-a. Imaj u vidu da radi na verziji MySQL-a koja ne podržava podupite.

[Ovu poruku je menjao jablan dana 12.01.2006. u 14:05 GMT+1]
[ Dejan Topalovic @ 12.01.2006. 13:07 ] @
Zamolio bih vas da se suzdrzite od prepucavanja i provokacija, jer to ne pripada jednoj konstruktivnoj diskusiji...
[ branimir.ts @ 12.01.2006. 13:09 ] @
Za koju verziju MySQL ti treba resenje?

Pozdrav
[ Dejan Topalovic @ 12.01.2006. 13:20 ] @
Verzije ispod 4.1 ne podrzavaju podupite.
[ Fedya @ 12.01.2006. 13:31 ] @
Ako procitate temu od pocetka videcete da sam vec napisao da verzije starije od 4.1 ne podrzavaju podupite a covek je odgovorio da koristi verziju 3.0.18.

Znaci Branimire:
Citat:
jablan: :) Izvoli, reši čoveku problem bez OUTER JOIN-a. Imaj u vidu da radi na verziji MySQL-a koja ne podržava podupite.
[ Milos Sreckovic @ 12.01.2006. 13:51 ] @
nadam se samo da nece biti mrtvih

bilo bi lepo da vidimo to resenje bez OUTER JOIN, iako cu za dva dana da prebacim bazu na server sa verzijom 4.1.x pa cu uraditi sa podupitom:)