Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: SQL: Tuplat tietokantataulusta

Sivun loppuun

TL [22.07.2003 20:50:51]

#

Ongelmana on etsiä tietokantataulusta 'tuplat' SQL:ää käyttäen (eli siis SELECT * FROM taulu ... tyylisesti).
Eli, jos taulu olisi tälläinen:

nimi ikä
-----------------
Anna 22
Milla 19
Elina 18
Ville 23
Jarkko 19
Seppo 24
Niina 22
Samuli 22

niin millainen SQL lauseke palauttaisi tuloksen:

Milla 19
Jarkko 19
Anna 22
Niina 22
Samuli 22

eli lauseke hakisi ikä-kentän perusteella ne tietueet, joita on enemmän kuin yksi samaa. Kiitokset tietäjille :)

odys [22.07.2003 22:01:36]

#

Enpä tiedä onnistuuko toi että valitaan "tuplat" ainakin on semmoinen millä jätetään pois tuplat (DISTINCT).

Voit valita kaikki rivit ja jollain PHP skriptillä valita vain "tuplat".

SELECT * FROM nimet WHERE ika BETWEEN 19 AND 22

Päivitän viestiä jos keksin jonkun SQL ratkaisun.

Tarkasta vielä tämä linkki. Ihan hyvä SQL opas. http://www.w3schools.com/sql/default.asp

Sami [22.07.2003 22:22:19]

#

En tiedä sen toiminnasta oikeastaan mitään, mutta jos se voi pudottaa tuplat pois, niin voisiko se poistaa alkuperäisestä taulukosta uuden taulukon, josta on poistettu tuplat, jolloin uuteen taulukkoon jäisi vain tuplat jäljelle.

odys [22.07.2003 23:15:47]

#

No perjaatteessa, mutta tuo on täysin turhaa tietokannan koon kasvattamista.. Joku PHP skripti voisi olla paikallaan joka hakee tuloksesta vain tuplat.

Otype [23.07.2003 09:03:31]

#

SELECT nimi, ika
FROM Taulu
WHERE ika IN (SELECT ika FROM Taulu GROUP BY ika HAVING count(ika)>=2)
ORDER BY ika, nimi

eakem [23.07.2003 16:23:07]

#

Miksiköhän tuo Otypen select ei toimi mulla???
Aliselect toimii yksinään, mutta yhdistettynä pääkyselyyn (koko toi lause) ei enää toimikaan.

Tällä sain pelittämään:

SELECT distinct a.nimi, a.ika
FROM Taulu a, taulu b
WHERE a.ika=b.ika and a.nimi<>b.nimi
ORDER BY a.ika, a.nimi

Otype [23.07.2003 17:07:12]

#

MySQL:ssä ei alikyselyt toimi, jospa käytät sitä (uuteen versioon kylläkin löytyy tuki niille). Itse testasin tuon kyselyn MSSQL-Serverillä.

Minun mielestäni tuota DISTINCT:iä ei tarvitse tuossa sinun kyselyssäsi. Muutenkin DISTINCT:in käyttöä tulisi välttää, koska se on hidas.

eakem [23.07.2003 17:25:35]

#

Joo, testasin MySQL:ssa.
Ilman distinctia toi kysely palauttaa tuplia.

Otype [23.07.2003 17:42:38]

#

Joo tiedän, että se palauttaa "tuplia" joissain tapauksissa, mutta tuossa kyselyssä ei, koska tuossa WHERE-ehdossa varmistetaan tämä. Vai?

...mutta mitä käy sellaisessa tapauksessa, jossa on vaikka kaksi saman nimistä ja saman ikäistä ihmistä?


Sivun alkuun

Vastaus

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

Tietoa sivustosta