---
title: "DELETE från tre tabeller med olika relationer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/138129-delete-från-tre-tabeller-med-olika-relationer"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Melea"
published: "2005-11-23T16:34:50.000Z"
updated: "2005-11-23T19:00:43.000Z"
replies: 17
views: 411
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/138129-delete-från-tre-tabeller-med-olika-relationer"
---

# DELETE från tre tabeller med olika relationer

## #1 — Melea, 2005-11-23T16:34Z

Tjenixen!

Har fastnat... jag har tre tabeller som jobbar mellan varandra typ, såhär:

tbl_project - *id*
tbl_business - *projectid* (relation till tbl_project *id*)
tbl_comment - *businessid* (relation till tbl_business *id*)

Hur kan jag skriva en fråga som tar bort från alla dessa tabeller med ett id (tbl_project *id*)?

Tack på förhand!

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

## #2 — Peter S, 2005-11-23T16:44Z

DBMS?

I nyare versioner av MySQL kan du testa:

```
delete p
     , b
     , c
  from tbl_project  p
     , tbl_business b
     , tbl_comment  c
 where p.id = <id>
   and p.id
     = b.projectid
   and c.businessid
     = b.projectid
```

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

## #3 — Melea, 2005-11-23T16:49Z

Har MySQL 4.1.10, men det ville sig inte riktigt.

```
DELETE p, b, c
FROM p_project p, p_business b, p_comment c
WHERE p.id = $_GET[projectid]
    AND p.id = b.projectid
        AND c.businessid = b.projectid
```

**/r**
Hm, relationen var **p.id** till **b.projectid** och **b.id** till **c.businessid**

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

## #4 — Peter S, 2005-11-23T16:54Z

Vad händer om du skippar alias?

```
delete tbl_project  p
     , tbl_business b
     , tbl_comment  c
  from tbl_project
     , tbl_business
     , tbl_comment
 where p.id = <id>
   and p.id
     = b.projectid
   and c.businessid
     = b.id
```

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

## #5 — Melea, 2005-11-23T16:56Z

Då får jag upp 

```
Table 'project.tbl_project' doesn't exist
```

**/r**
Hold your horses, det står fel, vänta lite. ;)

**/r #2**
Det funkar! :)
Hur kommer det sig att prefixerna inte går att använda här?

**/r #3**
Detta funkar

```
delete tbl_project p
	 , tbl_business b
	 , tbl_comment c
  from tbl_project p
	 , tbl_business b
	 , tbl_comment c
 where p.id = <id>
   and p.id
	 = b.projectid
   and c.businessid
	 = b.id
```

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

## #6 — LarsG, 2005-11-23T17:02Z

Definiera foreign keys med on delete cascade.

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

## #7 — Melea, 2005-11-23T17:04Z

> **LarsG skrev:**
>
> Definiera foreign keys med on delete cascade.

Heroglyfer för mig, vad menar du? ;)

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

## #8 — LarsG, 2005-11-23T17:08Z

Om du definierar en foreign key med on delete cascade från t1 till t2 så innebär det att om du gör delete på poster i t2 så kommer poster som refererar dessa i t1 också att tas bort.

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

## #9 — Melea, 2005-11-23T17:10Z

Detta är en inställning man kan göra i MySQL? Eller har jag helt missförstått dig? :)
Hur löser jag detta bäst isåfall?

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

## #10 — LarsG, 2005-11-23T17:18Z

Jo, titta under create eller alter table i manualen.

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

## #11 — Melea, 2005-11-23T17:20Z

Tackar!

Om jag ska köra med den koden Peter gav mig tills vidare, så funkar det inte riktigt.
Om det inte finns några poster i tbl_business eller tbl_comment så tas inte projektet bort.

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

## #12 — Melea, 2005-11-23T17:42Z

\*bump\*

> **Melea skrev:**
>
> Om jag ska köra med den koden Peter gav mig tills vidare, så funkar det inte riktigt.
> Om det inte finns några poster i tbl_business eller tbl_comment så tas inte projektet bort.

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

## #13 — Peter S, 2005-11-23T17:49Z

Det är bättre att göra rätt från början.  :)  Med Lars förslag kan det då se ut enligt:

```
create table tbl_business(
  id int,
  projectid int,
  primary key (id),
  foreign key (projectid)
    references tbl_project (id)
      on delete cascade
)
```

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

## #14 — Melea, 2005-11-23T18:13Z

Har suttit och testat som en tok nu, men får inte till det.  :x 
Att skapa tabellen med foreign key funkar utmärkt, precis enligt din princip Peter.
Men om jag tar bort en post från tbl_project, där jag har en eller flera poster i tbl_business tas inte dessa bort.
Har läst manualen [här](http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html) hur man ska gå tillväga men det vill sig inte.

När jag ska skapa tbl_business lägger jag till 

```
FOREIGN KEY (`projectid`) REFERENCES tbl_project (`id`) ON DELETE CASCADE
```

Efter PRIMARY KEY.
Detta genererar inga felmeddelanden.

**/r** Ah, läste nu att det måste vara InnoDB.
Finns det någon liknande syntax för MyISAM eller måste jag konvertera om till InnoDB?

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

## #15 — LarsG, 2005-11-23T18:17Z

Foreign keys fungerar inte i MYISAM.

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

## #16 — Melea, 2005-11-23T18:18Z

Då blir det till att konvertera då! :)

Tack för hjälpen båda två!

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

## #17 — Melea, 2005-11-23T18:40Z

Gah, nu blir jag alldeles tokig på det här.  :x 
När jag nu ska skapa en tabell (efter att ha pillat i inställningarna i phpMyAdmin för att godkänna relationer mellan tabeller) så står det att den inte kan skapa tbl_project.frm.

Vad är frm för fil och varför går det inte att skapa den?  :l

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

## #18 — Melea, 2005-11-23T19:00Z

Ah, nu fick jag igång det!
Hade rört ihop det med att FOREIGN KEY skulle vara på tbl_project, och uppåt. :)

springer och gömmer mig i skamvrån

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/138129-delete-från-tre-tabeller-med-olika-relationer
