Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem mit SQL Update (https://www.delphipraxis.net/161305-problem-mit-sql-update.html)

fillibuster 28. Jun 2011 10:08

Datenbank: MySQL • Version: 5.1 • Zugriff über: phpMyAdmin

Problem mit SQL Update
 
Hallo,

gerade versuche ich einige Übersetzungen in unserer DB zu schieben:
Code:
UPDATE translations set name="Retaining plate" WHERE article_id in (SELECT article_id FROM `translations` WHERE name="Halteplatte" and language_id=1) AND language_id=2
Leider klappt das nicht:
Zitat:

#1093 - You can't specify target table 'translations' for update in FROM clause
Kann man das umgehen?

Viele Grüße ...

mquadrat 28. Jun 2011 10:17

AW: Problem mit SQL Update
 
Man könnte wohl sowas in der Art probieren

Code:
UPDATE tbl AS a
  INNER JOIN tbl AS b ON ....
  SET a.col = b.col
Ist von hier

jobo 28. Jun 2011 10:37

AW: Problem mit SQL Update
 
Das ist nicht unbedingt eine SQL Syntax Frage.
Du versuchst offenbar, eine Menge zu ändern, die gleichzeitig Teil Deiner Where Clause Kriterien ist. Das ist je nach DB problematisch.
Du schreibst nicht, in welchem Umfang/Rahmen das stattfindet.

2.Schrittig sollte es jedenfalls gehen.
Erst Pk IDs selektieren.
Dann Update mit Einschränkung lediglich auf PK Spalte.

DeddyH 28. Jun 2011 10:49

AW: Problem mit SQL Update
 
Vielleicht so?
SQL-Code:
UPDATE
  translations T
SET
  name = "Retaining plate"
WHERE
  language_id = 2
  AND EXISTS(
    SELECT
      * 
    FROM
      `translations` T2 
    WHERE
      T2.article_id = T.article_id
      AND T2.language_id = 1 
      AND T2.name = "Halteplatte")

fillibuster 28. Jun 2011 11:20

AW: Problem mit SQL Update
 
Hi,

@DeddyH
Zitat:

#1093 - You can't specify target table 'T' for update in FROM clause
@mquadrat
Mit nem Update bekomme ich das nicht hin :?
@jobo
Das hört sich gut an. Wie mach ich das? Mit einem View?

Viele Grüße ...

jobo 28. Jun 2011 12:36

AW: Problem mit SQL Update
 
Ein View würde an dem Kernproblem nichts ändern, Du schaust nur durch eine andere Brille auf die selben Daten.
Du zerlegst also Dein Update Statement in 2 SQL Befehle.

Teil1 findet die PK IDs deren Records geändert werden sollen.
Teil2 macht das Update, die Whereclause enthält lediglich die Liste der ID aus Teil 1, also per Copy/Paste Ergebnis aus 1 zur WhereClause Teil 2.

Wie gesagt, Du hast nicht verraten in welchem Rahmen Du diese Änderung benötigst. Für eine Einmal-Geschichte (Datenfixing) wäre ein einmaliges SQL Gebastel wie oben vertretbar.
In einem Programm könntest Du die 2. Teile dynamisch zusammen bauen. Serverseitig kann man es evtl. mit einer SP machen. Hier wäre per Code die gleiche Zerlegung der Schritte bestimmt erfolgreich. Elegant wäre aber natürlich ein einziges Statement. Ich kenne mySQL aber nicht gut genug, um das zu beschreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz