Je hebt veel oplossingen en een daarvan is het gebruik van left join
en je kunt er naar kijken
select t1.* from test t1
left join test t2
on t1.type = t2.type and t1.price > t2.price
group by t1.variety
having count(*) <=1
order by t1.type,t1.price
De logica is om een left join te doen met dezelfde tabel waar het type hetzelfde is en de prijs lager is dan de andere en tenslotte een group by
te doen de varity en gebruik vervolgens de count() waarbij u het aantal gewenste records per groep moet tonen. Merk op dat je in mysql de vrijheid hebt om een group by-clausule te hebben zoals in de bovenstaande query op een willekeurige manier die in andere RDBMS kan mislukken.
Nu je wat verwarring hebt over de alias
, in het bovenstaande voorbeeld is de tabelnaam test
en binnen de zoekopdracht wordt een pseudo-naam gegeven als t1
. Ook als je een self-join doet, is het belangrijk dat je unieke aliasnamen geeft voor dezelfde tabel. In het bovenstaande voorbeeld is dezelfde tabel samengevoegd met zichzelf, dus we moeten ervoor zorgen dat we een aliasnaam voor de tabellen geven.