[ engineer @ 19.08.2005. 18:53 ] @
| Verovatno cu se upljuvati objasnjavajuci jednu relativno jednostavnu situaciju, ali pokusacu biti kratak i jasan.
Imam tri tabele: jednu sa id radnika i posla, drugu sa imenima radnika i trecu sa opisima posla.
TABELA_A:
id AUTOINC
radnik1_id INTEGER
radnik2_id INTEGER
radnik3_id INTEGER
posao_id INTEGER
TABELA_B:
id AUTOINC
ime_radnika WIDESTRING
TABELA_C:
id AUTOINC
opis_posla WIDESTRING
Kako da formiram query tako da dobijem sledece:
1. kolona: ime_radnika(radnik1_id), ime_radnika(radnik2_id), ime_radnika(radnik3_id)
2. kolona: opis_posla(posao_id)
Dakle prva kolona treba da sadrzi imena sva tri radnika odvojena zarezima. Druga kolona treba da sadrzi opis posla. I naravno mogucnost sortiranaj po prvoj ili drugoj koloni  |
[ jajo @ 19.08.2005. 20:10 ] @
(Prvo napomena, ak je ovo u neke obrazovne svrhe, tab_a nije u prvoj normalnoj formi.
A ako je za produkciju, stav "tri radnika ce biti dovoljno za sve potrebe" ce jednom pasti u vodu)
uglavnom:
select r1.ime_radnika1 ||', '|| r2.ime_ranika2 ||', '|| r3.ime_radnika3, p.naziv_posla
from tab_a rp, tab_b r1, tab_b r2, tab_b r3, tab_c p
where p.id_posla = rp.id_posla
and r1.id_rad = rp.id_rad1
and r2.id_rad = rp.id_rad2
and r3.id_rad = rp.id_rad3
(|| je oznaka za konkatenciju, oznake ovise o bazi)
[ engineer @ 19.08.2005. 21:33 ] @
Citat:
(Prvo napomena, ak je ovo u neke obrazovne svrhe, tab_a nije u prvoj normalnoj formi.
A ako je za produkciju, stav "tri radnika ce biti dovoljno za sve potrebe" ce jednom pasti u vodu)
Slazem se, ovo je samo razrada problema...
Citat:
select r1.ime_radnika1 ||', '|| r2.ime_ranika2 ||', '|| r3.ime_radnika3, p.naziv_posla
from tab_a rp, tab_b r1, tab_b r2, tab_b r3, tab_c p
where p.id_posla = rp.id_posla
and r1.id_rad = rp.id_rad1
and r2.id_rad = rp.id_rad2
and r3.id_rad = rp.id_rad3
Ovo je OK, ali ne radi ako je neki od rp.id_rad1, rp.id_rad2 ili rp.id_rad3 = NULL...
[ goranvuc @ 19.08.2005. 22:03 ] @
Code:
SELECT (r1.ime_radnika + ', ' + r2.ime_radnika + ', ' + r3.ime_radnika) AS Radnici, p.naziv_posla AS Posao
FROM TABELA_A rp
LEFT JOIN TABELA_B r1 ON rp.radnik1_id = r1.id
LEFT JOIN TABELA_B r2 ON rp.radnik2_id = r2.id
LEFT JOIN TABELA_B r3 ON rp.radnik3_id = r3.id
INNER JOIN TABELA_C p ON rp.posao_id = p.id
Ako je moguce da posao_id bude null onda i tu stavi LEFT JOIN.
[ jajo @ 19.08.2005. 23:07 ] @
Slazem se, zaboravio sam na nullove
[ engineer @ 21.08.2005. 10:28 ] @
To mi je trebalo, ostaje mi jos da se otarasim ", , ," kada su neki od radnika nullovi.
Hvala goranvuc i jajo!
[ jajo @ 21.08.2005. 11:40 ] @
stavi ||prva_kolona||decode(prva_kolona, null, null, ' ,')....
ili neki pandan decode-u ovisno o bazi
[ goranvuc @ 21.08.2005. 11:46 ] @
Ako ti bude trebala pomoc za ovo poslednje, javi ali nam i reci koja je baza podataka u pitanju (ja ti mogu pomoci za MS SQL ili Access).
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.