MySQL UPDATE 使用 JOIN 到子查询

标签 mysql sql database

我有一个名为 sagepaydirect__transactions 的表,我正在通过迁移来更新该表,以将其 response 字段设置为名为 response 的表的 response 字段sagepaydirect__responses

这两者通过名为 sagepaydirect__requests 的表在 vendor_tx_code 字段中以 _ 分隔的字符串的最后 4 位数字上进行微妙的链接。

问题在于,sagepaydirect__requests 在连接到 sagepaydirect__transactions 时将有多行。我想要做的是执行 JOIN,以便 UPDATE 从 sagepaydirect__transactions 中 ID 较高的行中获取值。

这是我的查询尝试,但提示是 t.id 不存在。

UPDATE sagepaydirect__transactions t
INNER JOIN (
        SELECT * FROM sagepaydirect__requests rq
        WHERE SUBSTRING_INDEX(rq.vendor_tx_code, '_', -1) = t.id
        ORDER BY id DESC
        LIMIT 1
) rq_table
ON t.id = SUBSTRING_INDEX(rq_table.vendor_tx_code, '_', -1)
INNER JOIN sagepaydirect__responses rs
ON rq.id = rs.request_id
SET t.response = rs.status_detail

最佳答案

您正尝试在 from 子句中使用相关子查询。那是行不通的。下面使用聚合来获取最大id,然后继续进行join

UPDATE sagepaydirect__transactions t INNER JOIN
       (SELECT SUBSTRING_INDEX(rq.vendor_tx_code, '_', -1) as val, max(id) as maxid
        FROM sagepaydirect__requests rq
        WHERE SUBSTRING_INDEX(rq.vendor_tx_code, '_', -1) = t.id
        group by id SUBSTRING_INDEX(rq.vendor_tx_code, '_', -1)
      ) rq
      ON t.id = rq.val INNER JOIN
      sagepaydirect__responses rs
      ON rq.id = rs.request_id
    SET t.response = rs.status_detail;

关于MySQL UPDATE 使用 JOIN 到子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514120/

相关文章:

mysql - 是否可以将 RDS 实例配置为我当前 MySQL 服务器的从属?

php - 数据插入前数据库数据字段检查

php - 分组和总分 - 对此有什么想法吗?

php - 通过单个查询获取类别和文章

Java-检查数据库中是否已存在id

mysql - 字符串的比较不会返回 true,即使它们是相同的

sql - SQLAlchemy 中数据库名称和模式名称的区别?

php - 循环遍历 MySQL 查询和一组复选框

java - DBCP XAMPP 不接受我的时区

php - 如何使用代码点火器框架在查询 php 中将动态对象转换为数组