Update mit Wert aus selber Tabelle / selbe Spalte

regger

Benutzer
Beiträge
8
Ich möchte ein Update Statement formulieren.
Die Tabelle ist folgendermaßen aufgebaut.

+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| customized_type | varchar(30) | NO | MUL | | |
| customized_id | int(11) | NO | | 0 | |
| custom_field_id | int(11) | NO | MUL | 0 | |
| value | text | YES | | NULL | |
+-----------------+-------------+------+-----+---------+----------------+

Das Field value soll nun für alle Einträge einer custom_field_id auf Grund eines value eines anderen custom_field_id gesetzt werden. Gemeinsamkeit der Einträge ist die customized_id

Beispiel:

ID CUSTOMIZED_ID CUSTOM_FIELD_ID VALUE
1 4 28 655
1 4 32 -> Dieser Wert soll nun 'ABC' + 655 sein

Habe schon mit einem CONCAT + Subselect probiert, ohne Erfolg.
 
Werbung:
z.B.
Update alle Einträge wo CUSTOM_FIELD_ID = 32 auf 'ABC' + dem value vom Eintrag mit der CUSTOM_FIELD_ID 28, wobei CUSTOMIZED_ID die selbe ist.
 
upload_2014-1-29_11-55-4.png
Reicht vorerst folgende Info?:
Alle Einträge, wo custom_field_id = 61 sollen im Feld value auf 'RW' + value aus dem Eintrag mit custom_field_id = 28 gesetzt werden, wo customized_id ident ist.
 

Anhänge

  • upload_2014-1-29_11-52-46.png
    upload_2014-1-29_11-52-46.png
    12,2 KB · Aufrufe: 2
Wenn ich das richtig verstehe suchst du ungefähr das hier:
Code:
UPDATE    tabelle
SET        tabelle.VALUE = (    SELECT    'ABC' + t1.value
                            FROM    tabelle t1
                            WHERE    t1.CUSTOM_FILED_ID = 28
                            AND        t1.CUSTOMIZED_ID = tabelle.CUSTOMIZED_ID )
WHERE    tabelle.CUSTOM_FIELD_ID = 32
Allerdings gibt es hier mehrere Fehlermöglichkeiten. Der Subselect darf z.B. immer nur einen Wert zurück liefern, also müsste bei dem Code sichergestellt sein das jeder Datensatz nur ein Gegenstück hat. Außerdem bin ich mir nicht sicher ob man TEXT Spalten einfach so verketten kann, eventuell geht das nur bei CHAR. In jedem Fall wären Fehlermeldungen hilfreich.
 
Danke schon mal!

Diese Fehlermeldung kommt:

Ja, is klar:

Code:
mysql> create table foo (i int);
Query OK, 0 rows affected (0.01 sec)

mysql> update foo set i = (select 5*i from foo);
ERROR 1093 (HY000): You can't specify target table 'foo' for update in FROM clause

MySQL kann das und vieles mehr nicht. Schreib es um, mach es anders. Oder nehme eine DB, die das und mehr kann:

Code:
test=*# create table foo (i int);
CREATE TABLE
test=*# update foo set i = (select 5*i from foo);
UPDATE 0
 
Mist.
Ich tu mir leider schwer eine andere DB zu nehmen. Es ist eine vorhandene DB unseres Bugtracking und Wiki-Systems (Redmine).
 
Ich hätte eine Lösung für meinen Fall gefunden:

Code:
update custom_values a right outer join custom_values b on a.CUSTOMIZED_ID = b.CUSTOMIZED_ID 
set a.value = CONCAT('RW', b.value) 
where a.CUSTOM_FIELD_ID = 61 and b.CUSTOM_FIELD_ID = 28;

Jedoch bin ich nun draufgekommen dass ich zu jedem Eintrag mit CUSTOM_FIELD_ID = 28 erst einen mit CUSTOM_FIELD_ID = 61 anlegen muss :-(
 
Werbung:
Zurück
Oben