Det finns andra sätt, men de kommer alla att lida av att kolumnens data måste läsas, i stället för en snabb titt i ett index, så LIKE-sökningen är helt OK.
Fråga 2:
Djupet på nivån kan beräknas på flera sätt. Enklast är förstås djup=LEN(Fältet)-LEN(REPLACE(Fältet,'.','')). Om du har en DMBS som stöder triggers kan du uppdatera en djup-kolumn automatiskt vid INSERT och UPDATE, och slipper prestandaproblem. Detta kan ju med fördel användas även för Fråga 1.
Jag skulle rekommendera (eller läs: så gjorde jag själv när jag var i din situation) att du ger varje rad ett id och ett parentID som pekar på det id den hör till. Alltså:
"1" blir id=1 och parentID=0
"1.1" blir id=2 och parentID=1
"1.2" blir id=3 och parentID=1
"1.3" blir id=4 och parentID=1
"1.3.1" blir id=5 och parentID=4
"2" blir id=6 och parentID=0
"2.1" blir id=7 och parentID=6
osv...
I så fall, fråga 1:
SELECT * FROM tabellen WHERE parentID = 0;
Fråga 2 är lätt om du vet id:t, annars om din databas stödjer nästlade frågor borde det bli (har aldrig använt såna själv) SELECT * FROM tabellen WHERE parentID = (SELECT id FROM tabellen WHERE kolumn = '2');
269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e