Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 高级SQL更新问题_Mysql_Sql - Fatal编程技术网

Mysql 高级SQL更新问题

Mysql 高级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

我需要转换一个表兑换,以包括一个日期,将从布拉赫填充,但它目前不存在

我需要选择“兑换”表中支付自动键与“兑换.支付”匹配的所有行。这个数字包含在工资表中,我想知道这个日期。然后,我需要将其设置为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 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