我有一个名为 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/