sql- -robleema

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.
6510
Äänestä

Muut lukivat myös

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ä.

Äänestä

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));

Äänestä

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.

Äänestä
  • 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));

    Äänestä

  • Punikki & 7 hyypiötä kirjoitti:

    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..

    Äänestä

  • Anita kirjoitti:

    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

    Äänestä

Kommentoi aloitusta


Anita kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu