Minulla on kolme taulua:
tyontekijat (tyontekijanro, sukunimi, etunimi, jne)
lainaukset (lainausnro, tyontekijanro, tyokalunro, jne)
tyokalut (tyokalunro, nimke, jne)
tehtävä 1
Hae kaikkien(myös niiden työntekijoiden, jotka eivät ole lainanneet) nimi ja lainausten määrä
Tämä toimii:
SELECT sukunimi, etunimi, COUNT (lainauspvm) AS lainaustenlkm
FROM tyontekijat LEFT OUTER JOIN lainaukset ON tyontekijat.tyontekijanro=lainaukset.tyontekijanro
GROUP BY sukunimi, etunimi
(Access tosin poistaa OUTER-sanan)
tehtävä 2
Hae kaikkein työntekijöiden nimi ja lanausten lukumäärä työkaluittain ryhmiteltynä
yritin näin
SELECT sukunimi, etunimi, nimike, COUNT(lainauspvm) AS lainaustenlkm
FROM tyontekijat LEFT OUTER JOIN ( tyokalut INNER JOIN lainaukset ON tyokalut.tyokalunro=lainaukset.tyokalunro) ON tyontekijat.tyontekijanro=lainaukset.tyontekijanro
GROUP BY sukunimi, etunimi, nimike
access vastaa liitoslauseke ei tuettu
Auttakaa, help pliis, pitäis saada se todistuskin ;-)
tyontekijat (tyontekijanro, sukunimi, etunimi, jne)
lainaukset (lainausnro, tyontekijanro, tyokalunro, jne)
tyokalut (tyokalunro, nimke, jne)
tehtävä 1
Hae kaikkien(myös niiden työntekijoiden, jotka eivät ole lainanneet) nimi ja lainausten määrä
Tämä toimii:
SELECT sukunimi, etunimi, COUNT (lainauspvm) AS lainaustenlkm
FROM tyontekijat LEFT OUTER JOIN lainaukset ON tyontekijat.tyontekijanro=lainaukset.tyontekijanro
GROUP BY sukunimi, etunimi
(Access tosin poistaa OUTER-sanan)
tehtävä 2
Hae kaikkein työntekijöiden nimi ja lanausten lukumäärä työkaluittain ryhmiteltynä
yritin näin
SELECT sukunimi, etunimi, nimike, COUNT(lainauspvm) AS lainaustenlkm
FROM tyontekijat LEFT OUTER JOIN ( tyokalut INNER JOIN lainaukset ON tyokalut.tyokalunro=lainaukset.tyokalunro) ON tyontekijat.tyontekijanro=lainaukset.tyontekijanro
GROUP BY sukunimi, etunimi, nimike
access vastaa liitoslauseke ei tuettu
Auttakaa, help pliis, pitäis saada se todistuskin ;-)
Vastaukset 8
Vanhimmat
"LEFT OUTER JOIN" -> "LEFT JOIN"
Access vaan ilmoittelee, ettei lauseke ole tuettu.
Ok. Ongelma voipi myös johtua sitä, että left joinia ei voi yhdistää inner joiniin ihan miten vain. Kokeile allaolevaa..
SELECT tyontekijat.sukunimi, tyontekijat.etunimi, tyokalut.nimike, Count(lainaukset.lainauspvm) AS CountOflainauspvm
FROM (tyokalut RIGHT JOIN lainaukset ON tyokalut.tyokalunro = lainaukset.tyokalunro) RIGHT JOIN tyontekijat ON lainaukset.tyontekijanro = tyontekijat.tyontekijanro
GROUP BY tyontekijat.sukunimi, tyontekijat.etunimi, tyokalut.nimike;
TOIMII KIITOS!
En vielä ehtinyt ymmärtää, kuinka se näin päin menee ja mikä vika minun kysellyssäni on, mutta ainakin opinnot etenevät ja harjoitustyö on valmis. (Paitsi jos insinööri pyytää perustelemaan, että miksi näin ;-)
Miksi tuo right join kelpaa mutta left ei? Vai oliko minun kyselyssäni joku syntaksiongelma?
Eiköhän tuo juhannukseksi selviä. Kiitos vielä kerran.
sama olisi toiminut leftillä ihan ok. Luulen, että ongelmasi johtui seuraavasta:
inner joineja voi yleensä ketjuttaa monen eri taulun välillä miten lystää. Sama ei kuitnekaan koske left (tai right) joinia.
Voit tehdä näin:
tauluA leftjoin tauluB leftjoin tauluC
voit tehdä myös näin:
tauluA innerjoin tauluB leftjoin tauluC
Mutta et voi tehdä näin:
tauluA leftjoin tauluB innerjoin tauluC
Tuota ketjutusta ei vain voi tehdä yhdessä kyselyssä, koskapa relaatiosta tulee silloin ambigious (moniselitteinen).
Ehkä joku Ullman:in Principles of Database Systems -opukset kahlannut osaisi selittää teoriaa tarkemmin..
Kiitoksia vaan. Kaikki vaihtoehdot testataan. Kiva että yksinäiselle aikuisopiskelijalle on joku paikka,mistä kysyä neuvoa.
Hyvä jos neuvoista oli apua. Tulee sitä aina silloin tällöin lueskeltua näitä postauksia. Accessia on tullut pyöritettyä niin kauan, että suurimpaan osaan kysytyistä jutuista on itse joskus tullut törmättyä.
Mutta: Kaikkea saa kysyä, vastataan jos osataan. Kysymysten pitää tosin liittyä vain ja ainoastaan tietokoneiden sielunelämään.. ;)
Niin että mieluummin kyselet valmiin vastauksen ja saat huijaamalla sen todistuksesi kuin että yrittäisit oikeasti ymmärtää mitä menee pieleen?