Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.742 pregleda

Najnovija ↓

Spajanje tabela operatorom AND 17.02.2006. u 20:40 · pre 252 meseca #1
Pitanje se odnosi na kreiranje select iskaza i povezivanje rezultata operatorom AND
Npr. postoje dve tabele: knjige i pisci, i treca asocijativna tabela koja spaja knjige i pisce:
knjiga1:pisac1
pisac2
pisac3
knjiga2:pisac1
pisac2
knjiga3:pisac1
pisac3
Kako dobiti knjige koju su napisali i pisac1 AND pisac2. Ovo sam uradio formiranjem 2 temporary tabele:
CREATE TEMPORARY TABLE t1 SELECT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac1
CREATE TEMPORARY TABLE t2 SELECT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac2
t1=knjiga1
knjiga2
knjiga3
t2=knjiga1
knjiga2
i zatim spajanjem ove dve tabele po istoj knjizi dobijam konacan rezultat: knjiga1 i knjiga2
Ovo mi deluje prilicno komplikovano. Zar ne?
Re: Spajanje tabela operatorom AND 17.02.2006. u 22:12 · pre 252 meseca
izmenjeno 1 put, poslednji put Ana Komazec 17.02.2006. u 22:13
  1. Ana Komazec17.02.2006. u 22:13zapis iz teksta poruke
#2
Probaj ovako:

Select nazivKnjige
From Knjiga_pisac
Where pisac=pisac1 or pisac=pisac2
Group by nazivKnjige
Having Count(nazivKnjige)>1

Ovo je neki pokushaj bez kreiranja temporary tabela...Takodje OR umesto AND ali mozda radi...
Pozdrav
Re: Spajanje tabela operatorom AND 17.02.2006. u 23:24 · pre 252 meseca #3
Radi u slucaju da ima samo jedano AND povezivanje ali ukoliko se to zeli sa n povezivanja onda ne radi. Upravo je to i razlog zasto sam odustao od privremenih tabela (jako se komplikuje proces)
Re: Spajanje tabela operatorom AND 17.02.2006. u 23:38 · pre 252 meseca #4
Mada izgleda radi ako se u klauzuli having stavi count>n-1
gde je n broj izraza koji se povezuju operatorm AND
Re: Spajanje tabela operatorom AND 17.02.2006. u 23:48 · pre 252 meseca #5
Mozda bi mogao da iskoristis Union:

Code:

SELECT nazivKnjige FROM 
(SELECT DISTINCT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac1 
UNION 
SELECT DISTINCT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac2) AS Naslovi 
GROUP BY nazivKnjige 
HAVING COUNT(nazivKnjige) = 2


a za tri pisca bi bilo:
Code:

SELECT nazivKnjige FROM 
(SELECT DISTINCT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac1 
UNION 
SELECT DISTINCT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac2 
UNION 
SELECT DISTINCT nazivKnjige FROM knjiga_pisac WHERE pisac=pisac3) AS Naslovi 
GROUP BY nazivKnjige 
HAVING COUNT(nazivKnjige) = 3


To je ideja, ako ne radi izvini, nije da sam probao, vec ja to onako :)
Re: Spajanje tabela operatorom AND 17.02.2006. u 23:50 · pre 252 meseca
izmenjeno 1 put, poslednji put Ana Komazec 17.02.2006. u 23:53
  1. Ana Komazec17.02.2006. u 23:53zapis iz teksta poruke
#6

Citat:
Mada izgleda radi ako se u klauzuli having stavi count>n-1
gde je n broj izraza koji se povezuju operatorm AND


Pa da, ovo je bio primer ako se trazi zajednicka knjiga 2 pisca, za tri bi bilo Count(nazivKnjiga)>2 itd.
U svakom sluchaju, OR bi trebalo staviti umesto AND, bar je meni na slichnom primeru radilo.
Pozdrav
Re: Spajanje tabela operatorom AND 18.02.2006. u 16:08 · pre 252 meseca #8
Citat:
count(...) = n (lepse izgleda)


Samo jedna napomena: Ukoliko stavish Count()=n, u rezultate ti nece uci knjige koje je pisao jos neki pisac sem trazenih. Npr. ukoliko su knjigu "Matematika" pisali Mika, Pera i Laza a u upitu ti stoji zahtev za prikazivanjem knjige koju su zajedno pisali Mika i Pera, kao i Count()=2, "Matematika" ti se nece prikazati u rezultatima jer je kod ove knjige Count()=3.
Znaci, sve zavisi od toga sta trazis. Count()=n je u redu samo ukoliko trazis knjigu koju su iskljucivo pisali Mika i Pera, i niko vishe.
U suprotnom, moze da stoji Count()>=n, da bi bile ukljucene i knjige koje imaju jos neke pisce osim navedenih.

Pozdrav
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme