MYSQL Update über 2 Tabellen
Hey,
ich habe zwei Tabellen, welche ich gleichzeitig Updaten möchte, falls möglich.
Tabelle1:
Tabelle2:
Beziehung: `s_articles_details`.articleID=`s_articles`.id
Nun möchte das Feld `s_articles_details`.instock und `s_articles`.active auf 0 setzen, wenn das Datum von `s_articles`.changetime < '2011-10-05 10:32:58' ist.
Mein Versuch:
Bei dieser WHERE Klausel werden aber keine Datensätze selektiert.
Geht das überhaupt in einem Wisch?
Danke
ich habe zwei Tabellen, welche ich gleichzeitig Updaten möchte, falls möglich.
Tabelle1:
SELECT `s_articles`.active FROM `s_articles` WHERE changetime < '2011-10-05 10:32:58'
order by changetime DESC
SELECT `s_articles_details`.instock FROM `s_articles_details`
INNER JOIN `s_articles` ON `s_articles_details`.articleID=`s_articles`.id
WHERE `s_articles`.changetime <'2011-10-05 10:32:58'
order by `s_articles`.changetime DESC
Nun möchte das Feld `s_articles_details`.instock und `s_articles`.active auf 0 setzen, wenn das Datum von `s_articles`.changetime < '2011-10-05 10:32:58' ist.
Mein Versuch:
UPDATE `s_articles`, `s_articles_details`
SET `s_articles`.active = 0,
`s_articles_details`.instock = 0
WHERE `s_articles_details`.articleID=`s_articles`.id
AND `s_articles`.changetime <'2011-10-05 10:32:58'
Geht das überhaupt in einem Wisch?
Danke
9 Antworten
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 11:08:16 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 11:15:04 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 11:41:41 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 11:53:47 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 13:04:53 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 13:28:49 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 13:37:49 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 14:46:47 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 15:07:44 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 14:46:47 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 13:37:49 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 13:28:49 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 13:04:53 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 11:53:47 Uhr
- LÖSUNG thaenhusen schreibt am 05.10.2011 um 11:41:41 Uhr
- LÖSUNG ottscho schreibt am 05.10.2011 um 11:15:04 Uhr
LÖSUNG 05.10.2011 um 11:08 Uhr
LÖSUNG 05.10.2011 um 11:15 Uhr
LÖSUNG 05.10.2011 um 11:41 Uhr
Moin.
Sorry. Versuchs mal so.
PS.: Sonst schick mal einen kurzen Dump der Tabellen...
HTH
MK
UPDATE `s_articles` inner join `s_articles_details`
ON `s_articles_details`.articleID = `s_articles`.id
where `s_articles`.changetime <'2011-10-05 10:32:58'
SET `s_articles`.active = 0, `s_articles_details`.instock = 0
PS.: Sonst schick mal einen kurzen Dump der Tabellen...
HTH
MK
LÖSUNG 05.10.2011 um 11:53 Uhr
mhhh, hier habe ich bei deinem Statement nun einen Fehler:
Fehler
SQL-Befehl:
UPDATE `s_articles` INNER JOIN `s_articles_details` ON `s_articles_details`.articleID = `s_articles`.id WHERE `s_articles`.changetime < '2011-10-05 10:32:58' SET `s_articles`.active =0,
`s_articles_details`.instock =0
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where `s_articles`.changetime <'2011-10-05 10:32:58'
SET `s_articles`.active =' at line 3
Das habe ich noch versucht:
Aber gleiches Ergebnis. Statement läuft, aber 0 betroffene Datensätze.
SQL Dump so direkt kann ich dir leider nicht schicken. Kundendaten.
Aber ich kann dir einen Export von beiden Tabellen, jeweils die ersten 2-3 Zeilen zukommen lassen.
Fehler
SQL-Befehl:
UPDATE `s_articles` INNER JOIN `s_articles_details` ON `s_articles_details`.articleID = `s_articles`.id WHERE `s_articles`.changetime < '2011-10-05 10:32:58' SET `s_articles`.active =0,
`s_articles_details`.instock =0
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where `s_articles`.changetime <'2011-10-05 10:32:58'
SET `s_articles`.active =' at line 3
Das habe ich noch versucht:
update `s_articles_details`
set `s_articles_details`.instock = 0
where `s_articles_details`.articleID in
(select `s_articles`.id from `s_articles` where`s_articles`.changetime <'2011-10-05 10:32:58')
SQL Dump so direkt kann ich dir leider nicht schicken. Kundendaten.
Aber ich kann dir einen Export von beiden Tabellen, jeweils die ersten 2-3 Zeilen zukommen lassen.
LÖSUNG 05.10.2011 um 13:04 Uhr
Hab dir ne PN geschickt ;)
Neuster Versuch:
Gleiches Ergebnis. 0 Datensätze betroffen.
Mache ich nur die Unterabfrage
select id from `s_articles` where changetime < '2011-10-05 10:32:58'
oder
select count(*) from `s_articles` where changetime < '2011-10-05 10:32:58'
erhalte ich aber 44264 Datensätze.
Ich blicks echt nicht!
Mache ich:
erhalte ich einen Datensatz zurück,
mache ich aber:
bekomme ich wieder 0 Datensätze zurück
Neuster Versuch:
UPDATE `s_articles_details`
SET `s_articles_details`.instock = 0
WHERE `s_articles_details`.articleID in
(select id from `s_articles` where changetime < '2011-10-05 10:32:58' )
Mache ich nur die Unterabfrage
select id from `s_articles` where changetime < '2011-10-05 10:32:58'
oder
select count(*) from `s_articles` where changetime < '2011-10-05 10:32:58'
erhalte ich aber 44264 Datensätze.
Ich blicks echt nicht!
Mache ich:
SELECT instock
FROM `s_articles_details`
WHERE articleID =4
mache ich aber:
UPDATE `s_articles_details`
SET instock = 0
WHERE articleID = 4
LÖSUNG 05.10.2011 um 13:28 Uhr
Moin.
Das funktioniert jetzt. ID 1 und 4 in den Testdaten werden damit geupdated.
Meine Syntax kam von einem anderen SQL System. Sorry.
HTH
MK
UPDATE `s_articles`, `s_articles_details`
SET `s_articles`.active = 0, `s_articles_details`.instock = 0
WHERE `s_articles_details`.articleID = `s_articles`.id and
`s_articles`.changetime <'2011-10-05 10:32:58'
Meine Syntax kam von einem anderen SQL System. Sorry.
HTH
MK
LÖSUNG 05.10.2011 um 13:37 Uhr
ich muss idich enttäusche, Geht nicht.
Aber ich habe eine Ahnung, woran es liegt. Es muss am WHERE liegen im Bezug auf die Formatierung des Datum/Uhrzeit.
Ich habe das Ganze mal auf eine Tabelle beschränkt.
Select geht aber Update nicht!
Das ergibt wieder tausende Treffer.
Das Update allerdings ergibt wieder NULL:
Aber ich habe eine Ahnung, woran es liegt. Es muss am WHERE liegen im Bezug auf die Formatierung des Datum/Uhrzeit.
Ich habe das Ganze mal auf eine Tabelle beschränkt.
Select geht aber Update nicht!
SELECT active
FROM `s_articles`
WHERE changetime <'2011-10-05 10:32:58'
Das Update allerdings ergibt wieder NULL:
UPDATE `s_articles`
SET active = 0
WHERE changetime < '2011-10-05 10:32:58'
ODER
UPDATE `s_articles`
SET active = 0
WHERE changetime < CAST('2011-10-05 10:32:58' AS DATETIME)
LÖSUNG 05.10.2011 um 14:46 Uhr
LÖSUNG 05.10.2011 um 15:07 Uhr