sql >> Databasteknik >  >> RDS >> Mysql

Hur man väljer ett objekt, det nedan och det ovan i MYSQL

Här är ett annat sätt att göra det med UNION s. Jag tror att detta är lite lättare att förstå och mer flexibelt än det accepterade svaret. Observera att exemplet antar id fältet är unikt, vilket verkar vara fallet baserat på din fråga.

SQL-frågan nedan antar att din tabell heter demo och har ett unikt id och tabellen har fyllts i med de värden du angav i din fråga.

( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) > 0 ORDER BY id DESC LIMIT 1 )
UNION ( SELECT id FROM demo WHERE id = 'd01' ORDER BY id ) UNION 
( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) < 0 ORDER BY id ASC LIMIT 1 ) 
ORDER BY id

Det ger följande resultat:b03, d01, d02 .

Denna lösning är flexibel eftersom du kan ändra var och en av LIMIT 1 satser till LIMIT N där N är vilket nummer som helst. På så sätt kan du till exempel få de 3 föregående raderna och de följande 6 raderna.



  1. 2 sätt att returnera rader som endast innehåller alfanumeriska tecken i MariaDB

  2. #1221 - Felaktig användning av UPDATE och ORDER BY

  3. i mysql, på delete cascade fungerar inte

  4. JPA + Hibernate:Hur man definierar en begränsning som har ON DELETE CASCADE