[ scorpion667 @ 21.10.2008. 17:33 ] @
Pozdrav. Imam jedan maleni problem pa ako netko zna rješenje neka slobodno javi.
Zadatak je ovakav

Code:
Prikazati sve podatke o lokalima koji us iznajmljeni više puta nego što Marko Marković posjeduje Lokala, a manje nego ukupan broj iznajmljivanja Ivana Ivanica


Ja sam napisao kod ovako:
Code:
SELECT L.IDLokala, L.IDPoslCentra, L.IDVlasnika, L.IDVrsteLokala, L.Naziv, L.Povrsina, L.Telefon, count(*)
FROM Lokal L, UGOVOR U, KLIJENT K
WHERE U.IDLokala=L.IDLokala
AND U.IDKlijenta=K.IDKlijenta
GROUP BY L.IDLokala, L.IDPoslCentra, L.IDVlasnika, L.IDVrsteLokala, L.Naziv, L.Povrsina, L.Telefon 
HAVING COUNT(*)>(SELECT count(*)
                           FROM VLASNIK V, LOKAL L
                           WHERE L.IDVlasnika=V.IDVlasnika
                           AND V.Ime LIKE 'Marko'
                           AND V.Prezime LIKE 'Markovic'
                           HAVING COUNT(*)<(SELECT count(*)
                                                      FROM KLIJENT K, UGOVOR U, LOKAL L
                                                      WHERE U.IDLokala=L.IDLokala
                                                      AND U.IDKlijenta=K.IDKlijenta
                                                      AND K.Ime LIKE 'Ivan'
                                                      AND K.Prezime LIKE 'Ivanic')
                                                       )

Pretpostavljam da je ovo moja logička greška u drugom podupitu. Naime Marko Markovic posjeduje 2 lokala, a Ivan Ivanic je ukupno iznajmljivao 5 puta. Meni treba da mi izlista one lokale koji su iznajmljeni 3 ili 4 puta, ali kada pokrenem upit on mi izlista i one sa 5 ili 6 iznajmljivanja.
Unaprijed hvala na bilo kakvoj pomoći.
[ vbbojan @ 21.10.2008. 17:52 ] @
Lepa praksa je da kada se trazi pomoc ovog tipa da se daju
strukture tabela, relacije i test podaci, tada ce svima koji su
voljni da pomognu biti mnogo lakse da ti izadju u susret.
Mene licno "mrzi" da razmatram tvoj problem bez gore
navedenih stvari.
Kako se to radi mozes na primer videti u postavci zadnje mozgalice.
Potrudi se malo, ako ocekujes da se i drugi potrude oko tvog problema.

Pozdrav, Bojan
[ cdorde @ 21.10.2008. 17:52 ] @
Probaj ovako:

SELECT L.IDLokala, L.IDPoslCentra, L.IDVlasnika, L.IDVrsteLokala, L.Naziv, L.Povrsina, L.Telefon, count(*)
FROM Lokal L, UGOVOR U, KLIJENT K
WHERE U.IDLokala=L.IDLokala
AND U.IDKlijenta=K.IDKlijenta
GROUP BY L.IDLokala, L.IDPoslCentra, L.IDVlasnika, L.IDVrsteLokala, L.Naziv, L.Povrsina, L.Telefon
HAVING COUNT(*)>(SELECT count(*)
FROM VLASNIK V, LOKAL L
WHERE L.IDVlasnika=V.IDVlasnika
AND V.Ime LIKE 'Marko'
AND V.Prezime LIKE 'Markovic')
AND
COUNT(*)<(SELECT count(*)
FROM KLIJENT K, UGOVOR U, LOKAL L
WHERE U.IDLokala=L.IDLokala
AND U.IDKlijenta=K.IDKlijenta
AND K.Ime LIKE 'Ivan'
AND K.Prezime LIKE 'Ivanic')
)
[ cdorde @ 21.10.2008. 17:59 ] @
Nažalost sad se izgubi struktura. Jednom rječju onaj drugi HAVING zamijeni sa

) AND

i na kraju obriši onu jednu zagrada viška.

Tvoj upit je davao odgvor na pitanje:

Daj mi sve lokale koji su iznajmljivani veći broj puta od lokala Marka Markovića i to pod uslovom da je taj lokal (lokal Marka Markovića) iznajmljivan manje puta nego lokal Ivana Ivanića.

Međutim, ako imaš neki lokal za koga je drugi count(*) jednak nula puta onda ono "veći broj puta" znači svi lokali ili dalje ako je neki od lokala Marka Markovića iznajmljen samo jednom onda ćeš dobiti sve lokale koji su iznajmljeni više puta nego jednom.

Nadam se da razumiješ, logika ti nije dobra.
[ scorpion667 @ 21.10.2008. 18:27 ] @
Citat:
cdorde: Nažalost sad se izgubi struktura. Jednom rječju onaj drugi HAVING zamijeni sa

) AND

i na kraju obriši onu jednu zagrada viška.

Tvoj upit je davao odgvor na pitanje:

Daj mi sve lokale koji su iznajmljivani veći broj puta od lokala Marka Markovića i to pod uslovom da je taj lokal (lokal Marka Markovića) iznajmljivan manje puta nego lokal Ivana Ivanića.

Međutim, ako imaš neki lokal za koga je drugi count(*) jednak nula puta onda ono "veći broj puta" znači svi lokali ili dalje ako je neki od lokala Marka Markovića iznajmljen samo jednom onda ćeš dobiti sve lokale koji su iznajmljeni više puta nego jednom.

Nadam se da razumiješ, logika ti nije dobra.


Hvala. Upalilo je. Znao sam da je to logička greška ali sam vam to bio ubacio radi orjentacije kakvi su podaci. Još jednom HVALA ti puno
[ scorpion667 @ 21.10.2008. 18:41 ] @
Znaš li možda zašto mi ovdje javlja "Syntax error in ORDER BY clause"?

SELECT K.Ime, K.Prezime, K.Adresa, count(*)
FROM KLIJENT K, UGOVOR U, VrstaKlijenta V
WHERE K.IDVrsteKlijenta=V.IDVrsteKilijenta
AND U.IDKlijenta=K.IDKlijenta
GROUP BY K.Ime, K.Prezime, K.Adresa
ORDER BY V.Kratica
HAVING count(*)>1

Sve veze između tablica su točne.
[ scorpion667 @ 21.10.2008. 18:58 ] @
Nista, rijesio sam.
[ momsab @ 21.10.2008. 19:09 ] @
kako?

gde su ti upiti za tabele i test podatke?
[ misk0 @ 22.10.2008. 09:03 ] @
Nadam se da je autor dobio zadovoljavajuci odgovor, ukoliko nije nek postavi ponovo temu postujuci pravila o postavljanju tema a to znaci ukljuciti DDL za tabelu/e i nekoliko test podataka.