Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: SQL: SELECT ja kaksi taulua

mrkebab [15.04.2008 13:35:01]

#

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.

Metabolix [15.04.2008 13:54:50]

#

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';
nimihintakategoria
Omena2.3hedelmät
Porkkana0.9juurekset
Peruna0.6juurekset
Lanttu0.7juurekset
Suolakurkku0.2vihannekset
Kurkku0.3vihannekset

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?

mrkebab [15.04.2008 14:10:02]

#

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

Metabolix [15.04.2008 14:15:50]

#

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.

Hycke [15.04.2008 14:30:35]

#

eikös se näin onnistu?

SELECT col1, col2
FROM taulu2
WHERE taulu2.aitiId  IN (SELECT taulu.id FROM taulu WHERE joku=jotain )

mrkebab [15.04.2008 14:37:15]

#

Kiitos Metabolix.

Kokeilen ymmärsinkö itsekkään, mitä hain takaa.

EDIT: Kiitos Hycke. Taitaapi toimia myös tuollatavalla.
Nyt kovaa testausta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta