AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SQL Update

Ein Thema von fillibuster · begonnen am 28. Jun 2011 · letzter Beitrag vom 28. Jun 2011
Antwort Antwort
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#1

Problem mit SQL Update

  Alt 28. Jun 2011, 10:08
Datenbank: MySQL • Version: 5.1 • Zugriff über: phpMyAdmin
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 ...
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Problem mit SQL Update

  Alt 28. Jun 2011, 10:17
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Problem mit SQL Update

  Alt 28. Jun 2011, 10:37
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit SQL Update

  Alt 28. Jun 2011, 10:49
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")
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Problem mit SQL Update

  Alt 28. Jun 2011, 11:20
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 ...
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Problem mit SQL Update

  Alt 28. Jun 2011, 12:36
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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