eli minulla on 3 taulua: pelaaja, joukkue ja valmentaja.
haluaisin hakea nyt valmentajan perusteella pelaajia jotka ovat hännen valmennuksessaan, minulla on seuraavat avaimet mutta kun haen valmentajalla tulee hausta ambigious.
joukkue.valmentajanro = valmentaja.valmentajanro
pelaaja.joukkuenro= joukkue.joukkuenro
miten tämä tehtäisiin vai onko edes mahdollista??
myös tarvitsisin nähdä ne pelaajat vaikka heillä ei olisikaan joukkuetta tai valmentajaa.
haluaisin hakea nyt valmentajan perusteella pelaajia jotka ovat hännen valmennuksessaan, minulla on seuraavat avaimet mutta kun haen valmentajalla tulee hausta ambigious.
joukkue.valmentajanro = valmentaja.valmentajanro
pelaaja.joukkuenro= joukkue.joukkuenro
miten tämä tehtäisiin vai onko edes mahdollista??
myös tarvitsisin nähdä ne pelaajat vaikka heillä ei olisikaan joukkuetta tai valmentajaa.
Vastaukset 6
Vanhimmat
SELECT pelaaja.nimi FROM joukkue INNER JOIN pelaaja ON joukkue.joukkuenro = pelaaja.joukkuenro
WHERE joukkue.valmentajanro = [hakemasi valmentajanro]
Toivottavasti ymmärsin kannan rakenteen oikein. Tuossa where-ehdossa voi tietty hakea muullakin sarakkeella kuin valmentajanumero. Accessilla on aika kätevä tehdä tämäntyyppisiä kyselyitä.
Mulla on näin:
pelaajat:
pel_id (pääavain)
pel_nimi
jouk_id (vierasavain)
joukkueet:
jouk_id (pääavain)
jouk_nimi
valmentajat:
valm_id (pääavain)
valm_nimi
jouk_id (vierasavain)
Tietyn valmentajan pelaajat:
SELECT pelaajat.pel_nimi
FROM pelaajat INNER JOIN valmentajat ON pelaajat.jouk_id = valmentajat.jouk_id
WHERE (((valmentajat.valm_nimi)="Valmentaja"));
Mukaan pelaajat, joilla ei joukkuetta (eikä siis valmentajaa)
SELECT pelaajat.pel_nimi
FROM pelaajat LEFT JOIN valmentajat ON pelaajat.jouk_id = valmentajat.jouk_id
WHERE (((pelaajat.jouk_id) Is Null)) OR (((valmentajat.valm_nimi)="Valmentaja"));
Pelkät "roikkujat":
SELECT pelaajat.pel_nimi
FROM pelaajat
WHERE (((pelaajat.jouk_id) Is Null));
queryni teiltä oli vähän epämääräinen, tässä selvennystä
eli siis minulla on
pelaajataulu
pelaajaID //pääAvain
pelaaja_nim
pelaaja_joukkueID //vierasavain
joukkuetaulu
joukkueID //pääavain
joukkue_nim
joukkue_valmID //vierasavain
valmentajataulu
valmentajaID //pääavain
valmentaja_nim
tarvitsen listata esim.
select pelaajaID, pelaaja_nim, pelaaja_joukkueID, joukkuenimi, joukkue_valmId, valmentaja_nimi
from pelaaja, valmentaja, joukkue
where
joukkue.valmentajanro = valmentaja.valmentajanro
pelaaja.joukkuenro= joukkue.joukkuenro
kun lisään perään UNION saman kyselyn ilman where:ä sain myös mukaan ne pelaajat joilla ei ollut joukkuetta tai valmentajaa.
hakuni on:
select pelaajaID, pelaaja_nim, pelaaja_joukkueID, joukkuenimi, joukkue_valmId, valmentaja_nimi
from
pelaaja, joukkue, valmentaja
where
pelaaja.joukkueID = joukkue.joukkueID
joukkue.valmentajaID = valmentaja.valmentajaID AND
$select like '%$hakusanat%'
hakusana saadaan pudotusvalikosta valitulla optionilla.
Muuten kanta on sama kuin ed. esimerkissä, mutta nyt valmentaja on vierasavaimena joukkueessa
Tietyn valmentajan:
SELECT valmentajat.valm_nimi, pelaajat.pel_nimi, joukkueet.jouk_nimi
FROM valmentajat RIGHT JOIN (joukkueet RIGHT JOIN pelaajat ON joukkueet.jouk_id = pelaajat.jouk_id) ON valmentajat.valm_id = joukkueet.valm_id
WHERE (((valmentajat.valm_nimi)="Valmentajan Nimi"))
ORDER BY valmentajat.valm_nimi;
Tietty valmentaja joukkueettomat:
SELECT valmentajat.valm_nimi, pelaajat.pel_nimi, joukkueet.jouk_nimi
FROM valmentajat RIGHT JOIN (joukkueet RIGHT JOIN pelaajat ON joukkueet.jouk_id = pelaajat.jouk_id) ON valmentajat.valm_id = joukkueet.valm_id
WHERE (((valmentajat.valm_nimi)="Valmentajan Nimi")) OR (((valmentajat.valm_nimi) Is Null))
ORDER BY valmentajat.valm_nimi;
Joukkueettomat:
SELECT valmentajat.valm_nimi, pelaajat.pel_nimi, joukkueet.jouk_nimi
FROM valmentajat RIGHT JOIN (joukkueet RIGHT JOIN pelaajat ON joukkueet.jouk_id = pelaajat.jouk_id) ON valmentajat.valm_id = joukkueet.valm_id
WHERE (((valmentajat.valm_nimi) Is Null))
ORDER BY valmentajat.valm_nimi;
sama lyhyemmin:
SELECT Null AS valm_nimi, pelaajat.pel_nimi, Null AS jouk_nimi
FROM pelaajat
WHERE (((pelaajat.jouk_id) Is Null));
tällä lähti toimimaan halutulla tavalla..
pelaaja left join joukkue ON pelaaja.joukkueID = joukkue.joukkueID left join valmentaja on joukkue.valmentajaID = valmentaja.valmentajaID
en oikeasti katsonut tekstiäsi ;) heh usko tai älä mutta kerkesin tutustua tuohon http://dev.mysql.com/doc/mysql/en/JOIN.html
josta löytyy sangen mielenkiintosta juttua.
Kiitos kuiteskin vaivannäöstänne..
eli tällai mulla on, ei niinkun mitä olin kirjottanu tuolla äskön..;)
pelaaja left join joukkue ON pelaaja.joukkueID = joukkueID.joukkueID left join valmentaja on joukkue.valmentajaID = valmentaja.valmentajaID