[ marko000 @ 30.12.2003. 23:09 ] @
ako imam kompletnu tabelu i jos jednu koja bi bila podskup pomenute,kojim
upitom moze da se dobije razlika skupova?

marko
[ _owl_ @ 31.12.2003. 00:13 ] @
hint: EXCEPT (MINUS kod Oracle-a).
Code:

SELECT * FROM tabela1
EXCEPT
SELECT * FROM tabela2

ili obrnuto zavisi koja ti razlika treba.


[Ovu poruku je menjao _owl_ dana 31.12.2003. u 13:23 GMT]
[ marko000 @ 31.12.2003. 06:10 ] @
hvala puno..mislim da ce to zavrsiti posao...
sad videh da sam u brzini prevideo ovu poruku pa sam posalo jos jednu na istu temu
;)))
izvinjavam se moderatorima

Marko
[ dinke @ 12.01.2004. 09:50 ] @
Ovo je tipican primer za koriscenje LEFT JOIN-a.

Npr, ako je t1 prva tabela a t2 tabela koja je (kako ti rece) njen podskup evo kako bi dobio one slogove koji nisu prisutni u t2:

SELECT t1.*, t2.*
FROM t1 LEFT JOIN t2 ON t1.i1 = t2.i2
WHERE t2.i2 IS NULL

Za razliku od prethodnog ovaj query bi trebao da radi na vecini baza a ne samo na Oracle-u.

Pozdrav
Dinke

[ _owl_ @ 12.01.2004. 13:14 ] @
Prethodni upit radi na svim DBMS-ovima koji podrzavaju SQL 99 standard (mozda i 92 nisam siguran kada su uvedeni UNION, EXCEPT i INTERSECT). Neznam odakle ti da ce raditi samo na Oracle-u (ja sam samo naveo i koja je sintaksa za Oracle).
Druga stvar je sto upit koji koristi LEFT JOIN zahteva mnogo vise resursa nego upit koji koristi EXCEPT.
Treca stvar upit koji si dao nece raditi (radio bi kada bi se koristio LEFT OUTER JOIN a ne LEFT JOIN -- mogao bi malo da procesljas po dokumentaciji i vidis u cemu je razlika)
[ Zidar @ 12.01.2004. 14:18 ] @
Ono sa EXCEPT je OK teorijski, ako kazes da to ORACLE podrzava, OK, verujemo. Medjutim sumnjam da radi bilo gde drugo. Ne MS SQL 2000 postoji EXCEPT, ali kao funkcija a skupovi se zadaju kao nizovi, a ne kao tabele (mozda moze i sa tabelama, zna li neko?)

Ono sa LEFT JOIN radi u MS SQL 2000, potpuno isto kao LEFT OUTER JOIN, a radilo je i u verzijama od 6.5. Sta je bilo pre, ne znam. U Accessu radi isto, od verzije 95.

Da li i MySQL ima LEFT/RIGHT join?
[ dinke @ 12.01.2004. 22:07 ] @
Citat:
Neznam odakle ti da ce raditi samo na Oracle-u (ja sam samo naveo i koja je sintaksa za Oracle).

U pravu si, pogresno sam interpretirao tvoj post. No, i dalje stoji da na nekim bazama EXCEPT ne postoji.


Citat:
Treca stvar upit koji si dao nece raditi (radio bi kada bi se koristio LEFT OUTER JOIN a ne LEFT JOIN -- mogao bi malo da procesljas po dokumentaciji i vidis u cemu je razlika)

Upit je naravno 100 % ispravan, a kao dokaz ti dajem output iz MySQL-a 4.0.16 koji uzgred podrzava i LEFT i RIGHT JOIN . Right konkretno od verzije 3.23.25, Left mislim znatno ranije (ovo je ujedno i odgovor Zidaru).

Code:

mysql> select user(),version();
+-----------------+---------------------+
| user()          | version()           |
+-----------------+---------------------+
| dinke@localhost | 4.0.16-standard-log |
+-----------------+---------------------+
1 row in set (0.03 sec)

mysql> select * from t1;
+------+------+
| i1   | c1   |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
+------+------+
3 rows in set (0.00 sec)

mysql> select * from t2;
+------+------+
| i2   | c2   |
+------+------+
|    1 | a    |
|    2 | b    |
+------+------+
2 rows in set (0.00 sec)

mysql> SELECT t1.*, t2.*
    -> FROM t1 LEFT JOIN t2 ON t1.i1 = t2.i2
    -> WHERE t2.i2 IS NULL;
+------+------+------+------+
| i1   | c1   | i2   | c2   |
+------+------+------+------+
|    3 | c    | NULL | NULL |
+------+------+------+------+
1 row in set (0.00 sec)


Pozdrav
Dinke