[ kg.rules @ 27.11.2011. 11:35 ] @
Pozdrav svima,
pravim neku aplikaciju sa bazama pa sam se nesto zapetljao. Do sada je sve islo manje-vise ok tj nalazio sam resenja problema relativno lako (uz pomoc net.a naravno) ali oko ovoga se mucim vec nedelju-dve i nikako da nadjem pravu kombinaciju.

Zapravo, problem je u tome sto zelim da iz dve tabele izlistam samo razlicite redove. Tabele nemaju istu srukturu.

Npr, tabela 1: ID1, ID2, naziv
tabela 2: ID, naziv, adresa ....

E sad, redovi iz tabele 2 se nalaze i u tabeli 1.

Muci me kako da iz ove dve tabele izvucem samo redove koji su u tabeli jedan a koji nisu jednaki sa redovima iz tabele 2 (naravno gledajuci po id).

U nekom konkretnom slucaju:
tabela 1: ID1 = 100, ID2 = 54, naziv = "prvi red"
ID1 = 100, ID2 = 1, naziv = "drugi red"
ID1 = 100, ID2 = 32, naziv = "treci red"
ID1 = 100, ID2 = 3, naziv = "cetvrti red"

tabela 2: ID = 54, naziv = "Naziv u tabeli 2", adresa = "izmisljena 11"
ID = 32, naziv = "Naziv 2 u tabeli 2", adresa = "izmisljena 12"

Rezultat koji zelim da dobijem je tabela sa 2 reda i to:
ID1 = 100, ID2 = 1, naziv = "drugi red"
ID1 = 100, ID2 = 3, naziv = "cetvrti red"

Probao sam skoro sve na temu: "SELECT * FROM table1, table2 WHERE ID1 = 100 AND ID2 <> ID" ali on zapravo duplira redove ali i sa tako dupliranim redovima ako uradim DISTINCT
opet ne dobijem ono sto bih zeleo.

Nadam se da ima pomoci ovom problemu. Unapred hvala ...

P.S. ID2 sadrzi redove iz druge tabele.

[ Dusan Kondic @ 27.11.2011. 11:58 ] @
Ako sam dobro razumeo, ovo bi trebalo da bude rešenje
Code:

--RESENJE 1
SELECT * FROM table1 WHERE ID2 NOT IN (SELECT ID FROM table2)
ili
--RESENJE 2
SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.ID2 = t2.ID WHERE t2.ID IS NULL

Primer:
Code:

DECLARE @table1 TABLE(ID1 INT, ID2 INT, Naziv VARCHAR(20))
INSERT INTO @table1 (ID1, ID2, Naziv) VALUES(100, 54, 'prvi red')
INSERT INTO @table1 (ID1, ID2, Naziv) VALUES(100, 1, 'drugi red')
INSERT INTO @table1 (ID1, ID2, Naziv) VALUES(100, 32, 'treci red')
INSERT INTO @table1 (ID1, ID2, Naziv) VALUES(100, 3, 'cetvrti red')

DECLARE @table2 TABLE(ID INT, Naziv VARCHAR(20), Adresa VARCHAR(30))
INSERT INTO @table2 (ID, Naziv, Adresa) VALUES(54, 'Naziv u tabeli 2', 'izmisljena 11')
INSERT INTO @table2 (ID, Naziv, Adresa) VALUES(32, 'Naziv 2 u tabeli 2', 'izmisljena 12')

--RESENJE 1
SELECT * FROM @table1 WHERE ID2 NOT IN (SELECT ID FROM @table2)

--RESENJE 2
SELECT t1.* FROM @table1 t1 LEFT JOIN @table2 t2 ON t1.ID2 = t2.ID WHERE t2.ID IS NULL
[ kg.rules @ 27.11.2011. 12:24 ] @
Lepo si ti razumeo ali moras priznati da sam ja lepo i obijasnio problem :)

Salim se naravno.

Primenio sam prvo resenje. Radi bas ono sto mi je potrebno.

Ima nekoliko mesta gde mislim da bih mogao da uradim ovakav JOIN pa cu pokusati da ispravim to jer se bojim da je moj pristup bio aljkav
jer sam koristio distinct mada mi radi zadovoljavajuce tvoje resenje je puno cistije a samim tim i preporucljivije za upotrebu.

Puno hvala...