---
title: "JOIN? (Med fyra tabeller)"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/177778-join-med-fyra-tabeller"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "MickeA.com"
published: "2009-03-31T19:39:32.000Z"
updated: "2009-04-01T07:36:15.000Z"
replies: 5
views: 558
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/177778-join-med-fyra-tabeller"
---

# JOIN? (Med fyra tabeller)

## #1 — MickeA.com, 2009-03-31T19:39Z

Hej,

Lite klurigt problem jag har dykt på. Har fyra tabeller med sektioner, typer, nivåer och grupper.
Nu ska jag skriva ut alla sektioner/typer som har en grupp, som är aktiv och inte markerad som borttagen.

Såhär ser min databas ut:

```
[b]tbl_section[/b]
section_id
section_name
section_removed

[b]tbl_type[/b]
type_id
type_parent ('relaterad' till section_id)
type_name
type_removed

[b]tbl_level[/b]
level_id
level_parent ('relaterad' till type_id)
level_name
level_removed

[b]tbl_group[/b]
group_id ('relaterad' till level_id)
group_parent
group_name
group_active
group_removed
```

Om *\[kolumn\]*\_removed är 2 är den borttagen, så den ska vara 1 i alla tabeller.

Listan som jag vill skriva ut ska se ut såhär:

```
Sektion 1
  Typ 1_1
  Typ 1_2
  Typ 1_3

Sektion 2
  Typ 2_1
  Typ 2_2
  Typ 2_3
```

Hittills har jag kört en INNER JOIN på **tbl_section** och **tbl_type**, men jag måste även ha ett argument att \_endast\_ visa de sektioner/typer där det finns nivåer och dessa nivåer även innehåller \_minst\_ en öppen/ej raderad grupp.
Det som avgör om gruppen är aktiv är *group_active* och den ska vara 1.

Tacksam för hjälp, förstår inte hur jag ska reda det här när det är fyra tabeller att "hålla reda" på.

Tack!

/edit
DBMS är MySQL.
Sökte lite och hittade ett par trådar som jag ska kolla mer på..

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

## #2 — MickeA.com, 2009-03-31T20:07Z

Testade enligt ett exempel jag hittade:

```
SELECT 
a.section_id, a.section_name, a.section_name_int, 
b.type_id, b.type_parent, b.type_name, b.type_name_int, 
c.level_id, c.level_parent, 
d.group_id, d.group_parent, d.group_active 
FROM tbl_section a 
INNER JOIN (
	tbl_type b 
	LEFT OUTER JOIN (
					tbl_level c 
					RIGHT OUTER JOIN tbl_group d 
					ON d.group_parent = c.level_id
					) 
	ON c.level_parent = b.type_id
	) 
ON b.type_parent = a.section_id 
WHERE d.group_removed = 1 
AND group_active = 1
```

Men det blir inte ett enda rätt, verkar som om endast **en** typ från tbl_type hittas, vilket är fel.

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

## #3 — Peter S, 2009-03-31T20:09Z

```
select
	*
from
	tbl_section s inner join tbl_type t
	on
	s.section_id = t.type_parent and
	s.section_removed = 1 and
	t.type_removed = 1
where
	exists (select 1 from tbl_level l 
		inner join tbl_group g on l.level_id = g.group_parent and
		l.level_parent = t.type_id and
		l.level_removed = 1 and
		g.group_removed = 1 and
		g.group_active = 1)
```

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

## #4 — MickeA.com, 2009-04-01T06:22Z

```
[red][b]Unknown column 't.type_id' in 'on clause'[/b][/red]

SELECT * 
FROM tbl_section s INNER JOIN tbl_type t 
ON s.section_id = t.type_parent 
AND s.section_removed = 1 
AND t.type_removed = 1 
WHERE EXISTS 
		(
		SELECT 1 
		FROM tbl_level l INNER JOIN tbl_group g 
		ON l.level_id = g.group_parent 
		[b]AND l.level_parent = t.type_id [/b]
		AND l.level_removed = 1 
		AND g.group_removed = 1 
		AND g.group_active = 1
		)
```

Jag tror att det är den fetstilta raden ovan den gnäller men, men, det är konstigt, för t.type_id \_är\_ ett fält i den tabellen.

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

## #5 — Peter S, 2009-04-01T07:02Z

Om vi gör om lite grand då

```
SELECT * 
FROM tbl_section s INNER JOIN tbl_type t 
ON s.section_id = t.type_parent 
AND s.section_removed = 1 
AND t.type_removed = 1 
WHERE EXISTS 
		(
		SELECT 1 
		FROM tbl_level l INNER JOIN tbl_group g 
		ON l.level_id = g.group_parent 
		WHERE l.level_parent = t.type_id 
		AND l.level_removed = 1 
		AND g.group_removed = 1 
		AND g.group_active = 1
		)
```

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

## #6 — MickeA.com, 2009-04-01T07:36Z

Funkar fint, tack ska du ha!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/177778-join-med-fyra-tabeller
