Mysql 高级SQL更新问题
我需要转换一个表兑换,以包括一个日期,将从布拉赫填充,但它目前不存在 我需要选择“兑换”表中支付自动键与“兑换.支付”匹配的所有行。这个数字包含在工资表中,我想知道这个日期。然后,我需要将其设置为execute.date,并确保execute.days\u executed不等于0Mysql 高级SQL更新问题,mysql,sql,Mysql,Sql,我需要转换一个表兑换,以包括一个日期,将从布拉赫填充,但它目前不存在 我需要选择“兑换”表中支付自动键与“兑换.支付”匹配的所有行。这个数字包含在工资表中,我想知道这个日期。然后,我需要将其设置为execute.date,并确保execute.days\u executed不等于0 UPDATE redeem SET redeem.date =(SELECT blah.date FROM blah INNER JOIN pay ON pay.number = blah.number INNER
UPDATE redeem
SET redeem.date =(SELECT blah.date
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0)
这是我收到的错误:您不能在FROM子句中为更新指定目标表“赎回”
如何在一条SQL语句中在MySQL中实现这一点?试试以下方法:
UPDATE redeem SET redeem.date = blah.date
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0
如果由于MySQL发出子查询的方式,将其包装到另一个子查询中,则它应该工作:
UPDATE redeem
SET redeem.date =(SELECT date from ( select * from
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0))
对于FROM子句中的兑换表,应使用别名:
UPDATE redeem
SET redeem.date =(SELECT blah.date
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem r ON r.pay = pay.autokey
WHERE r.days_redeemed <>0)
这也应该起作用:
UPDATE
redeem
SET
date =
( SELECT blah.date
FROM
blah
JOIN
pay
ON blah.number = pay.number
WHERE
pay.autokey = redeem.pay
)
WHERE
days_redeemed <> 0
让我直说吧,你想更新一个不存在的表?如果是这样,那是不可能的。不,我正在尝试使用已经存在的blah表中的信息创建一个还不存在的字段。这个问题可能会给你一个提示,告诉你应该尝试什么:MySQL根本不喜欢这样。我在运行查询时遇到这个错误:1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解正确的语法,以便在第3行“FROM blah-internal-JOIN-pay-ON-pay.number=blah.number-internal-JOI”附近使用。我们有赢家了!谢谢你,我把它用于你的第二个解决方案。
UPDATE
redeem
SET
date =
( SELECT blah.date
FROM
blah
JOIN
pay
ON blah.number = pay.number
WHERE
pay.autokey = redeem.pay
)
WHERE
days_redeemed <> 0