Vinnaren i pepparkakshustävlingen!
2013-11-06, 14:04
  #1
Medlem
snowflake84s avatar
Hej,
jag har lite problem med en query..

UPDATE OfferCode SET status = 1, usedDate = '2013-01-01' WHERE id = (SELECT id FROM OfferCode WHERE code = 'vip' ORDER BY usedDate LIMIT 1)

anledning till att jag väljer att göra så är att db har dubletter av samma "code", och då vill jag endast uppdatera den första raden.

dvs
Kod:

[dbo.OfferCode]
code status usedDate
vip 0 2013-01-01
vip 0 2013-01-01
vip 0 2013-01-01
xxx 0 2013-01-01
yyy 0 2013-01-01
zzz 0 2013-01-01

ERROR [HY000] [MySQL][ODBC 5.1 Driver][mysqld-5.5.34]You can't specify target table 'OfferCode' for update in FROM clause

Det jag är ute efter att kunna uppdatera första raden med "code=vip" och sätta om statusen till "1"

Kod:

[dbo.OfferCode]
code status usedDate
vip 1 2013-01-01
vip 0 2013-01-01
vip 0 2013-01-01
xxx 0 2013-01-01
yyy 0 2013-01-01
zzz 0 2013-01-01
Citera
2013-11-06, 14:42
  #2
Medlem
dengo.dajordens avatar
Citat:
Ursprungligen postat av snowflake84
Hej,
jag har lite problem med en query..

UPDATE OfferCode SET status = 1, usedDate = '2013-01-01' WHERE id = (SELECT id FROM OfferCode WHERE code = 'vip' ORDER BY usedDate LIMIT 1)

anledning till att jag väljer att göra så är att db har dubletter av samma "code", och då vill jag endast uppdatera den första raden.

dvs
Kod:

[dbo.OfferCode]
code status usedDate
vip 0 2013-01-01
vip 0 2013-01-01
vip 0 2013-01-01
xxx 0 2013-01-01
yyy 0 2013-01-01
zzz 0 2013-01-01

ERROR [HY000] [MySQL][ODBC 5.1 Driver][mysqld-5.5.34]You can't specify target table 'OfferCode' for update in FROM clause

Det jag är ute efter att kunna uppdatera första raden med "code=vip" och sätta om statusen till "1"

Kod:

[dbo.OfferCode]
code status usedDate
vip 1 2013-01-01
vip 0 2013-01-01
vip 0 2013-01-01
xxx 0 2013-01-01
yyy 0 2013-01-01
zzz 0 2013-01-01

Prova med:

WHERE id = (SELECT min(id) FROM OfferCode WHERE code = 'vip')

sen förklara varför du specificerar "WHERE code = 'vip'"
tänker du köra en update för varje code?

du borde använda GROUP BY isf för update av alla code på en gång.
Citera
2013-11-06, 17:28
  #3
Medlem
http://stackoverflow.com/questions/4...in-from-clause
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback