[SQL] Limit instellen op meerdere types

Pagina: 1
Acties:

  • Scott
  • Registratie: December 2004
  • Laatst online: 16-05 07:02

Scott

Ik ben, dus ik tweak

Topicstarter
Geen hele duidelijke titel, maar ik heb een tabel:

idnaamtype
1Scott2
2Klaasje1
3Keesje1
4Pietje2


Nu wil ik dus maar 1 rij van elk type. Dit zou dus de rijen met ID 1 en 2 moeten retourneren, als ik de limit per type op 1 zet.

Is dit te doen in 1 query ?

Alvast bedankt,
Scott

PS. Ik hoop dat het duidelijk is, anders hoor ik het wel ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:04

Janoz

Moderator Devschuur®

!litemod

Wat wil je precies terug krijgen? Als je de naam er ook bij wilt krijgen, welke naam wil je er dan bij hebben? Wil je Klaasje of Keesje bij 1 hebben?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:06
En wat wil je dan krijgen voor de naam als je per type slechts 1 row wilt krijgen ?
Waarom bv niet rijen 3 en 4 ?

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
4
5
6
7
select tab.*
from   tabel tab
where  tab.id = 
(select min(tab2.id)
 from   tabel tab2
 where  tab2.type = tab.type
)

[ Voor 3% gewijzigd door justmental op 17-01-2005 09:15 ]

Who is John Galt?


  • Scott
  • Registratie: December 2004
  • Laatst online: 16-05 07:02

Scott

Ik ben, dus ik tweak

Topicstarter
Janoz schreef op maandag 17 januari 2005 @ 09:09:
Wat wil je precies terug krijgen? Als je de naam er ook bij wilt krijgen, welke naam wil je er dan bij hebben? Wil je Klaasje of Keesje bij 1 hebben?
Nou, dat opzich maakt niet zoveel uit. Ik order namelijk ook op RAND(), dus dat zal dan toch random zijn. :)

@ justmental: Bedankt! Kun je eens uitleggen waarom je die MIN in de subquery er in hebt staan ?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

ScottB schreef op maandag 17 januari 2005 @ 17:24:
@ justmental: Bedankt! Kun je eens uitleggen waarom je die MIN in de subquery er in hebt staan ?
In jouw voorbeeld heb je (toevallig?) elke keer het minimale id per type geselecteerd.
De anderen probeerden je al te vragen wat je nu precies wilde als selectie, maar ik heb dat dus maar aangenomen.
Als je per type maar 1 record wilt zien moet je beslissen welke dat is.

Who is John Galt?


  • Scott
  • Registratie: December 2004
  • Laatst online: 16-05 07:02

Scott

Ik ben, dus ik tweak

Topicstarter
justmental schreef op maandag 17 januari 2005 @ 18:12:
[...]

In jouw voorbeeld heb je (toevallig?) elke keer het minimale id per type geselecteerd.
De anderen probeerden je al te vragen wat je nu precies wilde als selectie, maar ik heb dat dus maar aangenomen.
Als je per type maar 1 record wilt zien moet je beslissen welke dat is.
Ooh, nee, dat was gewoon toeval. Ik pakte gewoon de eerste rijen die ik tegenkwam, maar uiteindelijk wordt er random gesorteerd.

Dan nog iets kleins. Kan ik ook van bijv. type 1 een limit van 1 instellen, maar bij type 2 een limit van 2 ? En zoja, hoe dan ?

Ik heb ook nog een vraagje over je code. Ik heb nu deze query uitgevoerd:

SQL:
1
2
3
4
5
6
SELECT w1. *
FROM workmen w1
WHERE id = (
SELECT w2.id
FROM workmen w2
WHERE w2.type = w1.type )


Maar ik krijg nu ook de volgende fout:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT w2.id
FROM workmen w2
WHERE w2.type = w1.type ) LIMIT 0

Kan dit liggen aan mijn MySQL versie (4.0.20a), dat die geen subqueries ondersteunt ofzo ?

[ Voor 32% gewijzigd door Scott op 17-01-2005 20:07 ]

Pagina: 1