[ caplja caplja @ 23.12.2004. 20:26 ] @
Evo jedan naizgled jednostavan sql problem:

Povezivanjem nekoliko tabela dobio sam sledecu tabelu:
kolona 1 kolona 2
ID1 a
ID1 b
ID2 c
ID2 d
ID3 a
ID3 b
ID3 c

E sad mi je potrebno da izdvojim one vrednosti iz kolone 1 koje imaju
sve tri vrednosti (a,b,c) u koloni 2. Znaci u ovom jednostavnom primeru
izdvojili bi samo vrednost ID3
[ GoranVucicevic @ 23.12.2004. 21:23 ] @
Nisi nam rekao koja baza podataka!
[ caplja caplja @ 23.12.2004. 21:39 ] @
Nisam znao da je bas bitno koja je konkretno baza u pitanju, jer me interesuje uopsteno resenje u SQL-u.
Inace baza je MS SQL 2000
[ Ivand @ 23.12.2004. 23:40 ] @
mislim da to nece moci u access-u
zato sto ne podrzava da ugnjezdeni upit vraca skup vrednosti

ali inace ovako nesto bi radilo u standardnom sql-u
Code:

SELECT kolona1
FROM Table1
WHERE kolona1 in (select kolona1
                         from table1
                         where kolona2="a") and kolona1 in  (select kolona1
                                                                         from table1
                                                                         where kolona2="b") and kolona1 in (select kolona1
                                                                                                                                             from table1
                                                                                                                                          where kolona2="c")
Group by kolona1;

napomena:
ovaj upit u access nece raditi zbog gore pomenutog

ako neko ima bolju ideju kako moze ovo da se uradi ..... zanima me ....

[Ovu poruku je menjao Ivand dana 24.12.2004. u 09:39 GMT+1]
[ GoranVucicevic @ 24.12.2004. 01:20 ] @
Dakle, ako ti se tabela zove NekaTabela, a polja Polje1 i Polje2 onda bi resenje moglo da bude:

SELECT Polje1 FROM (SELECT DISTINCT Polje1, Polje2 FROM NekaTabela) AS Spoj GROUP BY Polje1 HAVING COUNT = (SELECT COUNT(*) FROM (SELECT DISTINCT Polje2 FROM NekaTabela) AS Ukupno)

Napomena: Ovako dobijas samo one iz Polja1 koji imaju sve moguce pojave iz Polja2.

Napomena2: Ovo radi na Access XP
[ jablan @ 24.12.2004. 08:00 ] @
Citat:
GoranVucicevic:
Code:
SELECT Polje1 FROM
(SELECT DISTINCT Polje1, Polje2 FROM NekaTabela) AS Spoj
GROUP BY Polje1
HAVING COUNT = 
(SELECT COUNT(*) FROM (SELECT DISTINCT Polje2 FROM NekaTabela) AS Ukupno)

Ok, samo šta će ti ovaj selekt u prvim zagradama? Nije li dovoljno samo:
Code:
SELECT Polje1 FROM NekaTabela
GROUP BY Polje1
HAVING COUNT(*) = 
(SELECT COUNT(*) FROM (SELECT DISTINCT Polje2 FROM NekaTabela) AS Ukupno)


12:14 ispravih sintaksnu grešku

[Ovu poruku je menjao jablan dana 24.12.2004. u 12:21 GMT+1]
[ Ivand @ 24.12.2004. 08:48 ] @
Citat:
GoranVucicevic:
Napomena: Ovako dobijas samo one iz Polja1 koji imaju sve moguce pojave iz Polja2.


u ovom slucaju to nece raditi nece vratiti ID3
jer on nema vrednost "d" u koloni2.
[ GoranVucicevic @ 24.12.2004. 09:34 ] @
Onaj selekt u zagradama sam stavio da bih eliminisao ponavljajuce redove, posto caplja caplja nije naveo da li su moguci, pa kad vec trosim vreme, bolje da napravim opstije resenje. Pretpostavljao sam da mu trebaju samo pojave iz Polje1 koje imaju sve pojave iz Polje2 pa sam tako i formulisao resenje, ako mu to nije potrebno trebao je malo preciznije da postavi problem, a ovo moje ce valjda nekom koristiti (u svakom slucaju nece skoditi).
[ jablan @ 24.12.2004. 10:02 ] @
Citat:
GoranVucicevic: Onaj selekt u zagradama sam stavio da bih eliminisao ponavljajuce redove, posto caplja caplja nije naveo da li su moguci,

Kako misliš da bi eliminisao ponavljajuće redove? Čim staviš "group by", u rezultatima se neće pojaviti dva ista reda.
[ GoranVucicevic @ 24.12.2004. 11:05 ] @
Da, ali bi mi Count bio veci za broj ponavljajucih vrednosti, jer se odnosi na izvorni set podataka i zbog toga "Distinct" jer bi inace bilo moguce da se za neku pojavu iz Poje1 koja ima sve pojave iz Polje2, ali bar jednu ponavljajucu, nikad ne bih dobio to sto zelim (pogledaj deo koji se odnosi na "Having").
[ jablan @ 24.12.2004. 11:15 ] @
Mislio sam na selekt u prvim zagradama, koji sam u svom predlogu izostavio. U principu, nije bitno.