Terve.
Miten saan suoritettua haun, missä käytän ekasta selectistä saamiani
tuloksia toiseen hakuun
Eli tyyliin näin: Eka selectistä saaduilla id-arvoilla haettaisiin sitten toisesta taulusta kaikki ne jotka kuuluvat id-arvoihin:
Eka selecti tuottaa n. 20 id-arvoa.
SELECT taulu.id FROM taulu WHERE joku=jotain JA Sitten SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=taulu.id;
Kokeilin subqueryllä, mutta se näyttää toimivan vain silloin, kun subquery tuottaa vain yhden vastauksen.
Jos subquery ei tosiaan toimi, niin tässä toinen tapa. Valitaan halutut tiedot tuotteista, joiden yläkategoria on toisen taulun mukaan katsottuna 'kasvikset':
SELECT tuotteet.nimi, tuotteet.hinta, tuotteet.kategoria FROM kauppa.tuotteet, kauppa.kategoriapuu WHERE kategoriapuu.ala = tuotteet.kategoria AND kategoriapuu.yla = 'kasvikset';
nimi | hinta | kategoria |
---|---|---|
Omena | 2.3 | hedelmät |
Porkkana | 0.9 | juurekset |
Peruna | 0.6 | juurekset |
Lanttu | 0.7 | juurekset |
Suolakurkku | 0.2 | vihannekset |
Kurkku | 0.3 | vihannekset |
Edit: No jopas oli vaikeaa saada kaikki oikeat välit ja pilkut mukaan. :)
Edit 2: Kai muistit käyttää INiä =:n sijaan sen subqueryn kanssa?
Metabolix. En uskoakseni tarkoittanut tuota.
Vaan tälläistä:
Eli tämä kaikki suoritettaisiin YHDESSÄ (1) kyselyssä.
Eli ensin haetaan id:t ja sitten suoritetaan toinen select, missä
käytetään saatuja id-arvoja.
SELECT taulu.id FROM taulu WHERE joku=jotain
Ok. Tämä tuottaa tälläista:
1 2 3 4 13 14 15 16
Nyt samassa kyselyssä käytettäisiin ekasta selectistä saatuja arvoja näin:
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=1;
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=2;
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=3;
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=4;
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=13;
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId=14;
etc...
Eli tuollaista hakisin.
Tietenkään kyselyä ei suoriteta kuten yllä, vaan automaagisesti
Eli saataisiin tulokseksi vain
col1 col2
jtn jtn
jtn jtn
jtn jtn
etc..
Niinhän tuossa oikeastaan tehdään: ensin valitaan kaikki alakategoriat, joiden yläkategoriana on 'kasvikset', ja sitten valitaan kaikki näihin liittyvät tuotteet.
Omaan tapaukseesi sovellettuna:
SELECT taulu2.col1, taulu2.col2 FROM taulu, taulu2 WHERE taulu.joku=jotain AND taulu2.aitiId=taulu.id;
Voit käyttää myös erilaisia JOIN-lauseita. Tuohon tulokseen pääsee kyllä monella eri tavalla.
eikös se näin onnistu?
SELECT col1, col2 FROM taulu2 WHERE taulu2.aitiId IN (SELECT taulu.id FROM taulu WHERE joku=jotain )
Kiitos Metabolix.
Kokeilen ymmärsinkö itsekkään, mitä hain takaa.
EDIT: Kiitos Hycke. Taitaapi toimia myös tuollatavalla.
Nyt kovaa testausta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.