Mrzim ovu sintaksu sa "INNER JOIN", ali ako su vas tako učili onda ti tako pravi upite. Ali ta sintaksa je i uzrok što ti ne rade neki upiti, recimo onaj pod 2.
1.
Code (sql):
SELECT p.odrediste, p.prijevoz, o.naziv_org
FROM put p, org o
WHERE p.sifra_org = o.sifra_org
AND p.polaziste='Zagreb'
ili sa INNER JOIN sintaksom
SELECT p.odrediste, p.prijevoz, o.naziv_org
FROM put p INNER JOIN org o
ON p.sifra_org = o.sifra_org
WHERE p.polaziste='Zagreb'
greška u rešenju drugog zadatka je zato što se onaj WHERE, GROUP BY i HAVING odnosi na ceo upit a ne na ono što je posle join. Dakle,
2.
Code (sql):
SELECT o.*
FROM org AS o INNER JOIN (
SELECT sifra_org, COUNT(*)
FROM put
WHERE trajanje >2
GROUP BY sifra_org
HAVING COUNT(*) > 2 ) AS p
ON o.sifra_org=p.sifra_org
(u tvojim testnim podacima ni jedan organizator nema 3 putovanja)
3. Ovde si potpuno promašilia. Zašto radiš join org i put, kada ti org uopšte ne treba?
Mrzi me sada da pišem upite, probaj nešto da poraviš. Ako ne znaš odmah da napraviš ceo upit uradi parcijalno.
4. ovde si promašila čak i sintaksu. ovaj zadatak reši tako što ćeš da uradiš join tabele put sa samom sobom:
select ....
from put as p inner join put as prethodnik
on p.prethodi = prethodnik.sifra_put
....
Ovde nećeš dobiti nikakav rezultat, zato što nisi dobro prepisala polje prethodi u test podacima