---
title: "Föregående och nästa post i SQL sats?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/138759-föregående-och-nästa-post-i-sql-sats/page2"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Zaiman"
published: "2005-12-04T22:34:25.000Z"
updated: "2005-12-07T00:34:19.000Z"
replies: 22
views: 1267
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/138759-föregående-och-nästa-post-i-sql-sats"
---

# Föregående och nästa post i SQL sats?

_Sida 2 av 2._

## #21 — @nders, 2005-12-06T16:55Z

En tanke är att TOP inte har något syfte när man inte har ORDER BY., så du kan ju prova att ta bort "TOP 1" ur mitt kodförslag ovan.

I övrigt kan ditt DISTINCT-felmeddelande bero på att du använder en vanlig UNION, som ju per definition är DISTINCT. Använd UNION ALL istället, så borde du komma förbi det.

Edit: LarsG, mästaren på simultanpostning, eller är det jag det? ;) :bire

mvh

Permalänk: https://www.webforum.nu/p/1722660

## #22 — Zaiman, 2005-12-06T21:39Z

```
SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 < 7 AND Gallery_name = 18 order by id2 desc
UNION ALL
SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 = 7 AND Gallery_name = 18
UNION all
SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 > 7 AND Gallery_name = 18 order by id2
```

Okej...
Fungerar i Access men ej i SQL Server 2000, SQL Server 2005

Det löser ju problematiken temporärt eftersom jag inte gjort resten färdig för SQL ännu.
SQL klagar på UNION ALL som ett syntax error.. mycket knasigt.

Permalänk: https://www.webforum.nu/p/1722827

## #23 — emission, 2005-12-07T00:34Z

SQL Server gillar inte att man har ORDER BY före en UNION, men det går att lösa genom att bryta ut sökningarna i deriverade tabeller.

```
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 < 7 AND Gallery_name = 18 order by id2 desc) T
UNION ALL
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 = 7 AND Gallery_name = 18) T
UNION all
SELECT id2, image_text FROM (SELECT TOP 1 id2, image_text FROM tbl_Images WHERE id2 > 7 AND Gallery_name = 18 order by id2) T
```

Om du vill ha ut allt på en rad, så kan du använda subqueries. Dock får du bara ut id-numren på den föregående och nästa posten, men jag kan tänka mig att det är det som är intressant

```
SELECT i.ID,i.Gallery_name,(SELECT TOP 1 i2.ID FROM tbl_Images i2 WHERE i2.ID<i.ID AND i2.Gallery_name=i.Gallery_name ORDER BY i2.ID DESC) as PrevImage , (SELECT TOP 1 i3.ID FROM tbl_Images i3 WHERE i3.ID>i.ID AND i3.Gallery_name=i.Gallery_name ORDER BY i3.ID ASC) as NextImage
FROM tbl_Images i
WHERE i.id2 = 10 AND i.Gallery_name = 18
```

Vill man verkligen ha ut de andra kolumnerna också, så går det, genom att använda den ovanstående sökningen som en deriverad tabell, men vi kanske inte ska röra till det i onödan. :)

Permalänk: https://www.webforum.nu/p/1722871

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/138759-föregående-och-nästa-post-i-sql-sats/page2  
Föregående sida: https://www.webforum.nu/amne/databaser-sql/138759-föregående-och-nästa-post-i-sql-sats.md
