---
title: "Left join?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/101561-left-join"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Ankman"
published: "2004-04-15T01:38:21.000Z"
updated: "2004-04-15T09:54:18.000Z"
replies: 8
views: 328
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/101561-left-join"
---

# Left join?

## #1 — Ankman, 2004-04-15T01:38Z

Jag vill välja alla rader från records som stämmer med villkoret artist_id och om det finns en motsvarande rad i record_grades som även stämmer med record_grades.user_id vill jag ha med den också. Om det inte finns någon post som stämmer i record_grades skall grade vara NULL i resultatet.
Det finns aldrig mer än en post i record_grades som hör ihop med posten i records. 

Den här SQL-satset funkar inte så bra då den bara ger resultat om det finns rader i bägge tabellerna men den kanske kan illustrera vad jag vill åt.

```
$query =   "SELECT records.*, record_grades.grade
 				FROM
 					records
 				LEFT JOIN
 					record_grades
 				ON
 					records.id = record_grades.record_id
 				WHERE
 					records.artist_id = $artist_id
 				AND
 					record_grades.user_id = $this->logged_in_user_id
 				ORDER BY
	 				records.release_year
 				";
```

Någon som har koll på detta och vill hjälpa till lite?

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

## #2 — Engine^, 2004-04-15T06:14Z

Det beror på din WHERE-klausul.

```
AND record_grades.user_id = $this->logged_in_user_id
```

Det borde ju kunna gå att lösa med att flytta upp det villkoret i JOIN-delen

```
SELECT r.*, rg.grade
FROM records r
LEFT JOIN record_grades rg
  ON rg.record_id = r.id AND rg.user_id = $this->logged_in_user_id
ORDER BY r.release_year
```

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

## #3 — PDahlen, 2004-04-15T06:32Z

Blev inte det där samma som den första? ;)

Använd LEFT OUTER JOIN så borde det funka.

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

## #4 — @nders, 2004-04-15T06:37Z

> **PDahlen skrev:**
>
> Använd LEFT OUTER JOIN så borde det funka.

LEFT OUTER JOIN är samma sak som LEFT JOIN. :)

Mvh

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

## #5 — PDahlen, 2004-04-15T07:14Z

Jo, det stämmer men när jag lägger in LEFT JOIN i VS.NET och testar så lägger den till OUTER så du kan ju prova.
Ser även en annan sak. Det borde vara WHERE inte AND eftersom loginkollen skall göras på hela resultatet och inte på JOINen. Nedanstående returnerar korrekt resultat när jag testar. Det gjorde den däremot inte med AND.

```
SELECT r.*, rg.grade
FROM records r
LEFT OUTER JOIN record_grades rg
  ON rg.record_id = r.id
WHERE rg.user_id = $this->logged_in_user_id
ORDER BY r.release_year
```

Så lägg till OUTER och testa om det blir någon skillnad.

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

## #6 — Engine^, 2004-04-15T08:04Z

OUTER är som **@nders** påpekade *optional* enligt SQL-syntaxstandard och *ska* inte göra någon skillnad.

Att ha med 

```
WHERE rg.user_id = $this->logged_in_user_id
```

gör ju LEFT JOIN verkningslös om jag förstår tabelldesignen rätt. Även om skivan inte har något betyg så ska den vara med i SQL-resultatet.

Jag missade dock en liten WHERE-snutt i mitt svar...

```
SELECT r.*, rg.grade
FROM records r
LEFT JOIN record_grades rg
  ON rg.record_id = r.id AND rg.user_id = $this->logged_in_user_id
WHERE r.artist_id = $artist_id
ORDER BY r.release_year
```

Men eftersom jag inte är något ess på SQL förbehåller jag mig rätten att dementera allt jag svarar... ;)

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

## #7 — PDahlen, 2004-04-15T08:13Z

Sorry, jag som inte läste första inlägget ordentligt.
Engines sista SQL kod är den korrekta lösningen.

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

## #8 — Ankman, 2004-04-15T09:33Z

Engine^: ypperligt, tackar.

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

## #9 — Engine^, 2004-04-15T09:54Z

Bockar. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/101561-left-join
