---
title: "Problem med en join!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/154973-problem-med-en-join"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "inspiro"
published: "2006-12-17T22:00:34.000Z"
updated: "2006-12-17T22:53:32.000Z"
replies: 3
views: 489
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/154973-problem-med-en-join"
---

# Problem med en join!

## #1 — inspiro, 2006-12-17T22:00Z

Håller på med ett forum där både registrerade och ej registrerade kan skriva. De som skriver utan att vara registrerade (eller inte är inloggade) får -1 i UserID-kolumnen. Men när jag försöker hämta alla topics så lyckas jag inte få joinen att fungera, den som joinar ihop topics-tabellen med user-tabellen pga det här med de oregistrerade användarna. Den hämtar istället ut ALLA användare varje gång jag har en topic med -1 som UserID. 

Så här nånting vill jag göra... alltså hämta alla topics och de användare som skrivit samt även de topics som inte har någon användare:

```
FROM         ForumTopics INNER JOIN
                      Users ON ForumTopics.UserID = Users.ID OR ForumTopics.UserID = '-1'
```

Hjälp nån? Använder sql server.

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

## #2 — emission, 2006-12-17T22:13Z

Din JOIN-klausul säger att kopplingen mellan ForumTopics och Users ska vara att de har samma UserID, eller att ForumTopics.UserID är -1, vilket m.a.o innebär att alla rader i Users uppfyller kriteriet när ForumTopics.UserID=-1.

Det enklaste, och på många sätt bästa, sättet är att lägga in en Guest-user i User-tabellen, med UserID=-1. Självklart en User som man inte kan logga in som. På så vis bli Guest en fullvärdig medlem i User-arkitekturen, och man kan ge och ta bort rättigheter på ett kontrollerat sätt.

Rent SQL-mässigt löses JOIN-problemet:

```
FROM         ForumTopics LEFT JOIN
                      Users ON ForumTopics.UserID = Users.ID
WHERE ForumTopics.UserID = '-1' OR Users.ID IS NOT NULL
```

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

## #3 — inspiro, 2006-12-17T22:44Z

Aha, ok ja en guest kan förstås vara bra! Inte så dumt att lära sig ett exempel på en left join heller förstås... tackar! :) Är left join samma sak som left outer join?

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

## #4 — emission, 2006-12-17T22:53Z

> **inspiro skrev:**
>
> Aha, ok ja en guest kan förstås vara bra!

Helt klart. Du slipper en massa undantagshantering i SQL-frågor, och på andra ställen.

> **inspiro skrev:**
>
> Är left join samma sak som left outer join?

Japp, det är bara en slarvigare syntax.

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/154973-problem-med-en-join
