[ leka @ 23.11.2003. 12:41 ] @
Elem imam problem koji sam resio pesacki jer ne znam da ga resim elegantno, pa stoga molim nekog SQL gurua koji uz put dobro poznaje MySQL da mi pomogne...

Napomena: koristim MySQL 3.23.39 .

Imam dve tabele koje su veoma slicne
tabela "produkt1" ima ove kolone: ID, NAME
tabela "produkt2" ima ove kolone: ID, NAMN

Problem koji ja imam je - zelim da spojim obe tabele u jednu jedinu (SELECT rezultat jelte) . Problem mi je zapravo sto se druga kolona u drugoj tabeli zove drugacije i ne smem da promenim njen naziv da bih odradio prosti JOIN. Ne znam u MySQL kako reci da su NAME i NAMN jedna te ista kolona prilikom JOIN-a. Nazalost UNION u ovoj verziji ne postoji da bih eventualno spojio dva ista rezultata u jedan.

Svaki konstruktivan predlog je dobrodosao. Pozdrav svima.
[ overflow @ 23.11.2003. 13:53 ] @
JOIN i UNION nemaju veze jedno s' drugim pa sam zbunjen tvojim problemom ...
Da li bi mogao da navedes konkretan primer sa nekoliko n-torki u tabelama i rezultat koji zelis da dobijes?
[ leka @ 23.11.2003. 14:09 ] @
Znam ja da nemaju veze, ali u ovom slucaju mogu da imaju veze...
evo tabela:

tabela produkt1 (id, name):
1, 'tastatura'
2, 'mis'
3, 'monitor'

tabela produkt2 (id, namn):

55, 'stampac'
131, 'RS232C kabl 5m'
1111, 'mouse pad'

Zelim da spojim ove tabele i dobijem rezultat: (id, name):
1, 'tastatura'
2, 'mis'
3, 'monitor'
55, 'stampac'
131, 'RS232C kabl 5m'
1111, 'mouse pad'

[ broker @ 23.11.2003. 18:47 ] @
Napravis privremenu tabelu odgovarajuce strukture pa dvaput odradis select into table...

Pedja
[ leka @ 23.11.2003. 19:05 ] @
Predraze, to nazalost nije elegantno resenje koje zapravo trazim. :(
[ flylord @ 23.11.2003. 20:06 ] @
UNION je jedini moguci nacin za koji ja znam, tako da mozda je bolje da trazis neku alternativu. A verovatno ces morati preko minimum dva upita:(
Poz
p.s. nada se da gresim
[ leka @ 23.11.2003. 20:24 ] @
Stvar je u tome da sam ja ziveo u ubedjenju da se mogu izbeci dva INSERT-a u privremenu tabelu. S obzirom da niko nije dao resenje, a i ja se, naravno, nisam setio nicega, ostaje mi moje resenje u kome dva SELECT rezultata "snimim" u jedan jedini asocijativni niz...
[ bluesman @ 23.11.2003. 20:47 ] @
SELECT t1.* t2.* FROM tabela1 AS t1 LEFT JOIN tabela2 AS t2 ON (t2.neka_kolona = t1.ime_neke_kolone) WHERE ...

naravno, neka_kolona i ime_neke_kolone mogu biti proizvoljne kolone koje moraju imati isti tip (INT - INT, CHAR - CHAR) ...

ako se zovu isto onda mozes
USING (ime_iste_kolone)

Ovo je odgovor na prvo pitanje, ali tek sada sam video da si pitanje preformulisao pa trazis nesto drugo.
[ leka @ 23.11.2003. 21:40 ] @
Ne, nigde nisam preformulisao pitanje, problem ostaje i dalje isti. Probacu da odradim posao na taj nacin, ali cisto sumnjam, jer onaj tvoj SQL kod ne radi ono sto sam ja rekao u polaznom tekstu. Svejedno hvala! :-)
[ leka @ 23.11.2003. 21:55 ] @
Da malo pojasnim zasto ovo gore ne daje dobar rezultat...
Prosto onaj gore statement ce napraviti kao rezultat tabelu sa svim kolonama iz jedne i druge tabele, sto ja ne zelim, ja zelim samo dve kolone iz dve tabele, od kojih se prva (id) kolona zove ISTO u obe tabele, a druga kolona se zove razlicito - u jednoj "name" u drugoj "namn"...
Da, kolone su naravno istog tipa, i nema istih redova u tabelama gde su "id"-jevi isti! :-)
[ byTer @ 24.11.2003. 01:22 ] @
Ne znam kolko ja razumem ali mozda pomogne nesto poput

SELECT kol1, kol2, tab2.col1 as STH FROM tab1 INNER JOIN tab2 ON tab1.id=tab2.id


Odnosno samo da promenis ime polju.... Jel to treba?
[ overflow @ 24.11.2003. 08:28 ] @
Interesantan problem.
Moj predlog ti je prikacen uz poruku.
Priznajem da nije elegantno resenje, ali je tu negde sa trenutnim koji koristis ...
[ bluesman @ 25.11.2003. 02:55 ] @
Citat:
leka:
Ne, nigde nisam preformulisao pitanje, problem ostaje i dalje isti. Probacu da odradim posao na taj nacin, ali cisto sumnjam, jer onaj tvoj SQL kod ne radi ono sto sam ja rekao u polaznom tekstu. Svejedno hvala! :-)


Ma jasno mi je bilo dok sam pisao, ali posto sam vec bio napisao gre'ota fa se baci :-))

Ne moze da skodi, a ako ne skodi... :-))
[ leka @ 25.11.2003. 13:46 ] @
Pa tako sam vec i sam resio svoj problem. Ali sam mislio (kao sto pise u prvoj poruci) da postoji elegantnije resenje... :(

Citat:
overflow:
Interesantan problem.
Moj predlog ti je prikacen uz poruku.
Priznajem da nije elegantno resenje, ali je tu negde sa trenutnim koji koristis ...

[ broker @ 26.11.2003. 10:49 ] @
Evo nesto drugaciji prustup, bez pomocne tabele.

U svaku do tabela se doda slog sa istim ID-om koji sluzi za filtriranje kao nepotreban.
Evo primera podataka. U ovom primeru je uzeot da slgo sa ID-om 0 sluzi za filtriranje. To znaci da ne sme da postoji slog koji koristi taj id.

Code:

DROP TABLE IF EXISTS t1;
CREATE TABLE `t1` (
  `id` tinyint(3) unsigned default '0',
  `desc1` varchar(10) default NULL
) ENGINE=MyISAM;
INSERT INTO t1 VALUES("1", "Val1-1");
INSERT INTO t1 VALUES("3", "Val1-3");
INSERT INTO t1 VALUES("5", "Val1-5");
INSERT INTO t1 VALUES("7", "Val1-7");
INSERT INTO t1 VALUES("8", "Val1-8");
INSERT INTO t1 VALUES("0", "zero");

DROP TABLE IF EXISTS t2;
CREATE TABLE `t2` (
  `id` tinyint(3) unsigned default '0',
  `desc2` varchar(20) default NULL
) ENGINE=MyISAM;
INSERT INTO t2 VALUES("2", "Val2-2");
INSERT INTO t2 VALUES("4", "Val2-4");
INSERT INTO t2 VALUES("6", "Val2-6");
INSERT INTO t2 VALUES("8", "Val2-8");
INSERT INTO t2 VALUES("0", "zero");


Code:

select IF(t1.id <> 0,t1.id,t2.id) AS tid, IF(t1.id <> 0,t1.desc1,t2.desc2) AS tdesc from t1,t2
WHERE (t1.id <> t2.id) AND ((t1.id = 0) OR (t2.id=0))


Mada ja i dalje mislim da je najelegantije uraditi select u privremenu tabelu. :)