вопрос обновления MySQL - PullRequest
0 голосов
/ 04 июня 2010

Привет всем, я получаю эту ошибку при попытке обновить таблицу в моей базе данных:

Каждая производная таблица должна иметь свой псевдоним

Вот мой запрос MySQL, который я пытаюсь обновить:

 UPDATE (SELECT clientinfo.idNumber, clientinfo.theCompName, clientoffers.idNumber, 
 clientoffers.expTimeWaiting, clientoffers.theDateStart,
 clientoffers.theDateEnd, clientoffers.theOffer, clientoffers.isActive, 
 clientoffers.theType, clientoffers.fixedAmount, clientoffers.fixedUsed
 FROM clientinfo, clientoffers
 WHERE clientoffers.idNumber = clientinfo.idNumber
 AND clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES')
 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

Кажется, все в порядке, но почему-то не работает?

Любая помощь будет отличной! : О)

UPDATE

 sqltemp = "UPDATE clientinfo, clientoffers SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1 WHERE clientoffers.idNumber = clientinfo.idNumber" & _
             "AND clientoffers.theDateEnd >= '2010-06-03'" & _
             "AND clientoffers.theDateStart <= '2010-06-03'" & _
             "AND clientoffers.idNumber = 'NB351560'" & _
             "AND clientoffers.isActive = 'YES'"
        oRecordset.Open sqltemp, oConnection,3,3

Это дает мне ошибку Драйвер ODBC не поддерживает запрошенные свойства.

Я использую Mysql 5.1 с классическим ASP.

David

Ответы [ 2 ]

1 голос
/ 04 июня 2010

Почему там есть выбор? это даже необходимо?

Почему бы и нет:

 UPDATE clientinfo, clientoffers

 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

 WHERE clientoffers.idNumber = clientinfo.idNumber
 AND clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES'

или даже далее, если есть ограничение внешнего ключа для двух таблиц для idNumber (или можно предположить, что каждая запись clientoffer всегда имеет соответствующую запись clientinfo):

 UPDATE clientoffers

 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

 WHERE clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES'
0 голосов
/ 04 июня 2010

«Клиент предлагает». недопустимо вне скобок, поэтому вам нужно создать псевдоним для оператора select (попробуйте UPDATE (SELECT ...) foo SET foo.fixedUsed = foo.fixedUsed + 1

Тем не менее, проще иметь обновление для одной таблицы за раз:

UPDATE clientoffers
SET fixedUsed = fixedUsed + 1
WHERE
EXISTS (SELECT * FROM clientinfo WHERE
clientoffers.idNumber = clientinfo.idNumber)
AND clientoffers.theDatEnd >= '2010-06-03'
AND clientoffers.theDateStart <= '2010-06-03'
AND clientoffers.idNumber = 'NB351560'
AND clientoffers.isActive = 'YES

Кроме того, в зависимости от версии MySQL, синтаксис подзапроса EXISTS может не поддерживаться. Если это так, вы можете:

a.) Обновите MySQL или переключитесь на другой механизм БД b.) Используйте свой код для запуска выбора в цикле, а затем для каждой возвращаемой строки выполните один оператор обновления, не забывая заблокировать обе таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...