嘿所有我在尝试更新数据库中的表时遇到此错误:
每个派生表都必须有自己的别名
这是我想要更新的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
这似乎没问题,但由于某种原因似乎不起作用?
任何帮助都会很棒! :O)
更新
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驱动程序不支持请求的属性。
我正在使用经典ASP的Mysql 5.1。
大卫
答案 0 :(得分:1)
为什么选择那里?那甚至是必要的吗?
为什么不:
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'
答案 1 :(得分:0)
“客户提供”。在括号外无效,所以你需要为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。)使用您的代码在循环中运行select,然后,对于每个返回的行,发出一个更新语句,记住锁定两个表。