---
title: "Left join i MySQL"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/166468-left-join-i-mysql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "oskob"
published: "2007-11-16T18:30:38.000Z"
updated: "2007-11-22T15:58:07.000Z"
replies: 4
views: 695
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/166468-left-join-i-mysql"
---

# Left join i MySQL

## #1 — oskob, 2007-11-16T18:30Z

Hallå!

Jag lyckas inte få min left join att fungera som jag vill.
Jag har två tabeller: en med en drös datum och en med en massa statistik.
Det jag vill göra är att summera antal rader i statistiktabellen per dag.
Jag har löst det såhär:

Dates:

```
ID    Date
1     2007-11-15
2     2007-11-16
3     2007-11-17
osv...
```

 

Cache

```
ID   Date
1    2007-11-15 15:14:33
2    2007-11-15 23:22:22
3    2007-11-17 12:23:34
4    2007-11-18 15:33:12
osv...
```

 

```
SELECT Dates.Date, count( * ) AS Count
FROM Dates
LEFT OUTER JOIN Cache ON Dates.Date = left( Cache.Date, 10 ) 
WHERE Cache.Hit =  'u'
AND Cache.Ref =  'aac'
AND Dates.Date >=  '2007-10-01'
AND Dates.Date <=  '2007-11-31'
GROUP BY Dates.Date
```

Vilket ger detta resultat:

```
Date	        Count
2007-10-29      396
2007-10-30	1107
2007-11-02	877
2007-11-03	653
```

Problemet är att den hoppar över de datum som den inte hittar några rader för. Jag vill att det ska se ut såhär:

```
Date	        Count
2007-10-29      396
2007-10-30	1107
2007-10-31	0
2007-11-01	0
2007-11-02	877
2007-11-03	653
```

En left join borde ju ta med Alla rader i den vänstra tabellen, alltså datumen men det gör den ju uppenbarligen inte...

Tacksam för svar!

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

## #2 — LarsG, 2007-11-16T19:04Z

```
SELECT Dates.Date, count( * ) AS Count
FROM Dates
LEFT OUTER JOIN Cache ON Dates.Date = left( Cache.Date, 10 ) 
 and Cache.Hit =  'u'
AND Cache.Ref =  'aac'
where Dates.Date >=  '2007-10-01'
AND Dates.Date <=  '2007-11-31'
GROUP BY Dates.Date
```

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

## #3 — oskob, 2007-11-16T22:35Z

Oj... Det där verkarde vara otroligt tungt för databasen. Det tog 51 sekunder att utföra det där. Det förra tog knappt 1 sekund. Och det bara ca 200 000 rader. 
Dessutom får alla datum där inga rader hittades värdet 1 istället för 0 (eller null).
Konstigt... :(

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

## #4 — Gein, 2007-11-17T08:38Z

Inte så konstigt att den får värdet 1. Den hittar ju en rad, även om det råkar vara NULL-värden på högersidan av joinen. Prova istället count(Cache.Id).

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

## #5 — oskob, 2007-11-22T15:58Z

Ah, det löste den biffen! Man det tar ju fortfarande nästan en minut att genomföra... Jättekonstigt att det blir så segt bara för att man flyttar villkoren till join-raden istället för where...

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

---

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