---
title: "MySQL: Delete från select..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/135329-mysql-delete-från-select"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "desdecado"
published: "2005-10-05T19:17:02.000Z"
updated: "2005-10-06T16:11:38.000Z"
replies: 6
views: 511
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/135329-mysql-delete-från-select"
---

# MySQL: Delete från select...

## #1 — desdecado, 2005-10-05T19:17Z

Har sökt i online-manualen men hittar inte om det i MySQL går att göra en delete på resultatet ifrån en select-sats, alltså något i stil med:

DELETE FROM tabell WHERE EXISTS (SELECT \* FROM tabell WHERE... bla bla bla)

???

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

## #2 — LarsG, 2005-10-05T19:19Z

Jo, om du har version 4.1 eller senare.

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

## #3 — @nders, 2005-10-05T19:19Z

Det beror lite på vilken version av MySQL man använder, eftersom tidigare versioner än 4.1 inte stödjer subqueries.

Generellt sett skulle jag nog ha gjort så här:

```
DELETE FROM foo WHERE ID IN (SELECT fooid FROM bar)
```

Mvh

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

## #4 — desdecado, 2005-10-05T19:37Z

(jag har version 4.1.12)

Jag får tyvär error när jag försöker använda en select på samma tabell som jag vill radera. Syntaxen jag använder är:

```
delete from ds_search_history
where exists (select *
                    from ds_search_history as t
                    where t.search_keyword = ds_search_history.search_keyword
                    and    t.search_timestamp < ds_search_history.search_timestamp)
```

 

..jag testade givetvis även din variant, @nders, men det verkar inte fungera. Vad jag egentligen försöker göra är att radera alla dubletter men spara en av posterna. Select-satsen plockar ut alla dessa dubletter som jag vill ha bort.

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

## #5 — LarsG, 2005-10-06T07:47Z

Mysql har någon begränsning i det att man kan inte ange den tabell man gör delete på i subselecten om jag inte missminner mig.

Det alternativ som står till städes torde då vara att förfara enligt följande

```
create temporary table t as 
 select <kolumner>,min(search_timestamp)
from ds_search_history
group by <kolumner>

delete from ds_search_history

insert into ds_search_history 
select * from t
```

Med \<kolumner\> avses alla kolumner utom search_timestamp

Du får kontrollera syntaxen för att skapa en tabell med hjälp av select då Mysql ej följer standard i detta avseende.

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

## #6 — desdecado, 2005-10-06T08:01Z

Tack för hjälpen, jag ska kolla upp om det fungerade senare under dagen. Själv har jag kört MS SQL i mååånga år och där är det bara att tuta och köra. =)

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

## #7 — desdecado, 2005-10-06T16:11Z

Nice, det fungerade, men jag kunde tydligen inte göra en temptabell så det fick bli en "vanlig" istället... :)

Tackar och bockar!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/135329-mysql-delete-från-select
