MySQL stavki
8 naročnikov
8 naročnikov
Na faksu delamo svojo bazo, pa imam malo težave z stavki. Čeprav sem pogledal in prebral že kar nekaj tutorialov, sem še vedno v temi....
Naloga sprašuje, kdo je naredil največ izdelkov na nek dan, to imam v eni tabeli, potem pa bi moglo ven izpisat število izdelkov in ime ter priimek delavca.
Trenutno mam:
SELECT TOP 1 IDdelavec, stevilo
FROM narejeniizdelki
WHERE narejeniizdelki.IDdan=6;
Kak zdaj vključit še ime? Če dodam pod select:
SELECT TOP 1 IDdelavec, stevilo, Ime, Priimek
FROM narejeniizdelki, delavci
WHERE narejeniizdelki.IDdan=6
mi izpiše ven vse delavce. Prosim za pomoč,...
13 odgovorov
Tale TOP lih ne poznam ampak logika iz oracla ni kej dosti drugačna.
Oracle ima max, tko da izbereš max (stevilo_prodanih), ta ti vrne vrstico kjer je napisana največja številka. če takega polja nimaš moreš najprej narediti count in potem vrjetno kak gnezden stavek :)
Nisem si pogledal tole s TOP 1 in nikjer ne vidim omenjenega Oracla :)
Lahko pa mogoče narediš tako (če gre za Oracle)...
SELECT ID_delavec, Ime, Priimek, stevilo
FROM narejeni_izdelki, delavci
WHERE narejeni_izdelki.ID_dan=6
...
and rownum < 2 (za mysql bi dal verjetno čisto na koncu limit 1)
ORDER BY stevilo
Misliš da bi to šlo?
Po moje ti pride prav LEFT JOIN
npr:
SELECT TOP 1 ID_delavec, stevilo, delavci.Ime, delavci.Priimek
FROM narejeni_izdelki
WHERE narejeni_izdelki.ID_dan=6
LEFT JOIN delavci
ON narejeni_izdelki.ID_delavec=delavci.ID_delavec
ORDER BY delavci.Priimek
Gogy sej ne odgovarjaš meni :) Napisal je SQL in nimam pojma v katerem okolju :) Tale top se obnaša kot rownum v oraclu, kar pa zna biti zavajajoče razen če res hočeš samo eno vrstico ven. Samo kot opozorilo da se razna izračunavanja naredijo šele po tem ko se lahko sproži rownum...
Izgleda kot MSSQL. Pisem iz glave ...
SELECT TOP 1
d.Ime + ' ' + d.Priimek as name,
SUM(i.stevilo) as amount
FROM narejeni_izdelki i
LEFT JOIN delavci d WITH (NOLOCK) ON d.ID_delavec = i.ID_delavec
WHERE i.ID_dan=6
GROUP BY
d.Ime + ' ' + d.Priimek
ORDER BY
2 DESC
MySQL naj ne bi podpiral top stavka, tako da gre verjetno za MS SQL:
SELECT TOP 10 * FROM T MS SQL Server, Sybase ASE, MS Access
SELECT TOP 10 START AT 20 * FROM T Sybase SQL Anywhere (also supports the standard, since version 9.0.1)
Stavek "TOP 1" je zato, da izpiše samo tistega, ki je naredil največ izdelkov.
LEFT JOIN sem probal in mi vrne ERROR syntax.
Mantra me samo to, ker bi potreboval zraven še ime in priimek delavca ki je zapisan v drugi tabeli. In ko jaz določim, naj še to izpiše, mi izpiše vse delavce in ne samo tistega, ki je naredo največ izdelkov. Če pa ne vključim izpisa imena in priimka, pa funkcija lepo deluje,...