---
title: "Söka i forum, endast en träff per tråd"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/21739-söka-i-forum-endast-en-träff-per-tråd"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Erik Juhlin"
published: "2001-11-06T13:41:00.000Z"
updated: "2001-11-07T14:15:00.000Z"
replies: 16
views: 217
page: 1
pages: 1
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/21739-söka-i-forum-endast-en-träff-per-tråd"
---

# Söka i forum, endast en träff per tråd

## #1 — Erik Juhlin, 2001-11-06T13:41Z

Jag har den här SQLen:

```
SELECT DISTINCT ISNULL(iPostParentId, iPostId) AS iPostThreadId FROM tblForumPost p
```

Och den gör vad jag vill att den ska göra (tror jag). Problemet är bara att jag vill få ut resten av kolumnenrna och inte bara iPostThreadId.
Skriver jag , p.\* efter så får jag ett felmeddelande. :l

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

## #2 — Erik Juhlin, 2001-11-06T13:44Z

Och hur är det med DISTINCT. Kan man välja vilken ordning den plocka de enskilda sakerna?
Om jag skriver ORDER BY dPostCreationDate, går den i den ordningen då?

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

## #3 — LarsG, 2001-11-06T13:56Z

Vadå resten av kolumnerna? Distinct gäller alltid för alla kolumner i select-listan.

Hur då plockar de enkilda sakerna?

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

## #4 — Erik Juhlin, 2001-11-06T14:15Z

Aha, men jag vill liksom bara ha DISTINCT på "kolumnen" iPostThreadId. Sen vill jag att resten av kolumnerna bara ska hänga på...

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

## #5 — Erik Juhlin, 2001-11-06T14:16Z

Jag vill alltså göra en SELECT \*, men inte ha med samma iPostThreadId mer än en gång.

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

## #6 — LarsG, 2001-11-06T14:40Z

postid!c1
\---------
1\.....!kalle
1\.....!nisse

om du bara vill ha distinct postid, men alla kolumner, vilken av posterna kalle eller nisse skall du då returnera?

Om du säger att det gör det samma så är det något fel i din datamodell.

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

## #7 — Erik Juhlin, 2001-11-06T14:44Z

Jag vill ha den med lägst id eller tidigast dPostCreationDate.

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

## #8 — Erik Juhlin, 2001-11-06T14:51Z

Tabellen kan se ut ungefär så här:

```
iPostId iPostClubId iPostMemberId iPostParentId sPostSubject sPostBody dPostCreationDate
25      1           3             NULL          Hej!         Text...   2001-11-05 23:50:12.523
26      1           4             25            NULL         Txt..     2001-11-06 00:01:38.780
27      1           3             25            NULL         Txt...    2001-11-06 14:23:44.003
```

Jag vill att när man söker på "." så ska man bara få fram den första tråden. Den som är förälder och har iPostId 25. Och iPostThreadId ska vara 25.
Söker man på "txt" så ska man få fram den andra som har iPostId 26. iPostThreadId ska då också vara 25.

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

## #9 — Erik Juhlin, 2001-11-06T14:55Z

Finns det sen ett helt annat inlägg med bodyn Txt... så vill jag att den ska visas.
Därför tycker jag att SQLen jag skrev först verkar funka utmärkt. Men av den får jag ju inte ut de andra kolumnerna.

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

## #10 — LarsG, 2001-11-06T17:47Z

```
select coalesce(iPostParentId,iPostId), tabellen.* from tabellen
 where iPostId in (select min(iPostid) from tabellen
                    where sPostBody like '%Txt%'
                   group by iPostparentId)
```

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

## #11 — Erik Juhlin, 2001-11-06T17:49Z

Hjälp vad krångligt det blev genast.
Vad gör coalesce?

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

## #12 — LarsG, 2001-11-06T17:56Z

coalesce är likvärdig med isnull men den är standard.

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

## #13 — Erik Juhlin, 2001-11-06T18:35Z

Okej! :)

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

## #14 — Erik Juhlin, 2001-11-07T13:46Z

Så här fick jag skriva för att få det att funka:

```
select coalesce(iPostParentId,iPostId), tabellen.* from tabellen
where iPostId in (select min(iPostid) from tabellen
where sPostBody like '%Txt%'
group by coalesce(iPostparentId, iPostId))
```

Eftersom att LarsGs kod inte funkade som den skulle och min gjorde det så måste det betyda att jag är bättre än honom på SQL! ;) :e

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

## #15 — LarsG, 2001-11-07T13:57Z

Jag ser ingen skillnad.

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

## #16 — Erik Juhlin, 2001-11-07T14:06Z

Glömde att visa ändringen. Ändringen var ju:

```
group by coalesce(iPostparentId, iPostId)
```

Men om jag vill ha andra villkor, t.ex.:
WHERE iPostClubId = 2
WHERE sPostSubject LIKE '%..%'
WHERE iPostMemberId = 1
WHERE dPostCreationDate \> CONVERT(DATETIME, '2001-11-07 15:01:15.000', 21)

Var skriver jag dessa då? Innanför parantesen eller sist?

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

## #17 — LarsG, 2001-11-07T14:15Z

I subselecten är bättre ur prestandasynpunkt. Resultatmässigt så går det på ett ut så vitt jag kan se.
Testa!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/21739-söka-i-forum-endast-en-träff-per-tråd
