php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.06.2011, 23:57  
Neuer Benutzer
 
Registriert seit: 02.06.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
motions befindet sich auf einem aufstrebenden Ast
Standard mysql UPDATE mit Select subquery auf die gleiche Tabelle

Ich muss in einer Tabelle einige Daten kopieren, aber ich kriege die richtige SQL Syntax nicht auf die Reihe. Außerdem mag es Mysql wohl nicht, eine Tabelle zu updaten, die dann gleichzeitig auch per select in einer subquery benutzt wird.
Hat jemand einen Tip wie ich das Problem lösen kann?

Hier zum Verständnis das vereinfachte Probleme:
Tabelle test enthält eine verkette Liste/Baumstruktur mit den Feldern
t_id int(11)
text varchar(100)
bildname varchar(100)
parent int(11) -> zeigt auf die t_id des übergeordneten Eintrags; root der Liste hat die t_id = 0

Die Tabelle enthält jetzt an den Enden des Baumes einiges Rows mit bildname = NULL. Diese sollen jetzt identifiziert und mit dem Bildnamen des parent gefüllt werden. Eine php Schleife kommt aus Performance Gründen nicht in frage; es muß eine SQL Anweisung werden.

mein Ansatz war:
update test as t1
set t1.bildname = (select bildname from test where t_id=t1.parent)
where t1.bildname is null

aber das läuft leider nicht:
You can't specify target table 't1' for update in FROM clause
motions ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.06.2011, 07:18  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Google doch einfach mal nach der Fehlermeldung...

Grüße.
php1704 ist offline   Mit Zitat antworten
Alt 03.06.2011, 08:52  
Neuer Benutzer
 
Registriert seit: 02.06.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
motions befindet sich auf einem aufstrebenden Ast
Standard

Das habe ich schon gemacht und folgenden möglichen Ausweg gefunden:
UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);

Da ist der Select eine implizite temporäre Tabelle aber die Laufzeit ist grauenhaft und da ich in meinem aktuellen Problem ca. 5 Felder übertragen muss wird es nicht besser.

Hat noch irgend jemand eine andere Idee?

Nach langem Überlegen habe ich eventuell noch eine Tabelle in einer anderen Datenbank, die ich in dieser Update Query als Datenquelle verwenden kann. Mal sehen ob das klappt.
motions ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:19  
Erfahrener Benutzer
 
Benutzerbild von Sermon
 
Registriert seit: 04.03.2009
Beiträge: 231
Sermon befindet sich auf einem aufstrebenden Ast
Standard

Ich enter den Threat mal. Habe selbes Problem.
hat jemand dazu noch einen Rat?
__________________
Sermon ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:23  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

laut Mysql Manual soll es ab den 5er Versionen möglich sein, wie vom Threadersteller angegeben, die Tabelle selbst als Quelle mit zu verwenden - aber beschreib doch mal bitte dein KONKRETES Problem
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

Geändert von eagle275 (20.06.2011 um 14:27 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Geht das nicht über einen JOIN?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:49  
Erfahrener Benutzer
 
Benutzerbild von Sermon
 
Registriert seit: 04.03.2009
Beiträge: 231
Sermon befindet sich auf einem aufstrebenden Ast
Standard

Ich muss einen bestimmten Wert updaten.
einen vertragstyp. und dieser vertragstyp befindet sich in selber tabelle, wie die zusuchende id, an welcher stelle es geändert werden soll.
ich habe also schon mla alle di's die ich rbauche in ein view gepackt:
Code:
CREATE VIEW bauid
AS SELECT kv.baultranlagid
FROM anlagen.anlagen aa, kundendaten.kunden_anlagen ka, kundendaten.anlagenVertragstypen kv
WHERE aa.region = 26 and aa.id = ka.anlagenid and ka.id = kv.baultranlagid;
nun wollte ich das update ausführen:
Code:
UPDATE kundendaten.anlagenVertragstypen kav
SET kav.vertragstypId = 68
WHERE kav.baultranlagid = (select * from bauid);
ich dachte mir mit dem view umgehe ich den fehler. allerdings scheint dem nicht ganz so zu sein...
denn nun krieg eich folgende meldung:
#1443 - The definition of table 'bauid' prevents operation UPDATE on table 'kav'.
__________________
Sermon ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:59  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hm - mE sollte
Code:
(select * from bauid)
gezielt nur eine ID liefern - sonst würdest du ja quasi alle Datensätze updaten ...

möglicherweise stört er sich daran, dass du ALLE Spalten der Tabelle bauid ausliest
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 20.06.2011, 16:24  
Erfahrener Benutzer
 
Benutzerbild von Sermon
 
Registriert seit: 04.03.2009
Beiträge: 231
Sermon befindet sich auf einem aufstrebenden Ast
Standard

Ich will ja auch all die datensätze updaten, die da in der spalte stehen...
__________________
Sermon ist offline   Mit Zitat antworten
Alt 20.06.2011, 17:10  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dann solltest du aber auch wissen, dass ein Vergleich mit = nur genau eine ID verarbeiten kann.
Zudem glaube ich nicht, dass in der Tabelle bauid nur eine Spalte vorhanden ist - andernfalls ist das absolut miserables DB-Design.

Code:
UPDATE kundendaten.anlagenVertragstypen kav
SET kav.vertragstypId = 68
WHERE kav.baultranlagid IN (select `NurDieIDSpalte` from bauid);
Kinder Kinder...schaut heute eigentlich auch nur noch einer in die Doku, bevor er wild drauf los progra...frickelt?
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Ergebnise von SELECT mit UPDATE verarbeiten sharp Datenbanken 3 12.01.2011 17:07
MYSQL INSERT INTO variable geht nicht devil13 Datenbanken 15 05.08.2010 19:34
Daten aus Tabelle 1 über Vergleich mit Tabelle 2 ziehen (MySQL) juice122 Datenbanken 12 28.05.2010 22:22
mysql select if und else 2 tabellen sandrasandra Datenbanken 15 28.04.2010 00:37
* 2 tabellen -> mysql doppel select if und else??? sandrasandra Datenbanken 7 05.04.2010 22:18
[Erledigt] MySQL Link Resource in einer statischen Variablen speichern Lenki PHP-Fortgeschrittene 8 18.03.2010 16:37
[Erledigt] Mysql Tabelle liest bei Float nix aus?? Toby Datenbanken 10 19.02.2009 23:08
MYSQL select diffrenz 'spalte ' heute - gestern p-dichlorbenzol Datenbanken 8 14.02.2009 17:03
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
[Erledigt] MySQL Subquery Abfrage Kevz Datenbanken 6 09.05.2008 09:30
[Erledigt] Problem mit mySQL Datenbanken 7 27.09.2005 12:06
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
MySQL 4.x - SELECT `feld` LIKE 'ä' - Fehlerhaft MrNiceGuy Datenbanken 2 25.03.2005 14:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql update select, mysql update select subquery, mysql update subselect, update select mysql, mysql update mit select, sql update select subquery, mysql update where select, mysql select update, mysql update subquery gleiche tabelle, mysql update from select, mysql update select selbe tabelle, mysql update subquery, mysql subquery, update subselect, update mit select mysql, mysql update with select, mysql update in select, select update mysql, update mit subselect auf gleiche tabelle, sql update mit unterabfrage aus gleicher tabelle

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum