MySQL 根据 select 的结果更新相同的 table
MySQL update the same table based on results of a select
我有一个名为 downloads
的 table,它记录了从各种 URL 下载的文件。有一列 downloads.created
是 DATETIME
和一列 downloads.master
这是一个布尔字段,表示哪条记录是主副本。
以下查询成功获取了最近日期的记录:
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
我想通过将 master
设置为 1
来更新这些记录。
我要执行的SELECT
和UPDATE
都适用于相同的table、downloads
我尝试了以下 MySQL - UPDATE query based on SELECT Query :
UPDATE downloads
(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
)
SET master = 1
但这给出了一个错误:
Error : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
' at line 2
我在上面 link 上尝试的其他解决方案更新了整个 table,因为我只是想更新从工作 SELECT
中检索到的记录。请有人帮我指明正确的方向吗?
试试这个
UPDATE downloads
SET master = 1
FROM
(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
)
使用加入
update t1 SET t1.master = 1 from downloads as t1
join downloads as t2
on t2.url_id = t1.url_id
ORDER BY t2.created DESC LIMIT 1
你需要同时使用连接和更新来做这样的事情。尝试
UPDATE downloads d
JOIN (SELECT t1.id FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC LIMIT 1
)
) a on d.id = a.id SET d.`master` = 1
这应该可行,也许您可以进一步优化提取最新记录的方式
我有一个名为 downloads
的 table,它记录了从各种 URL 下载的文件。有一列 downloads.created
是 DATETIME
和一列 downloads.master
这是一个布尔字段,表示哪条记录是主副本。
以下查询成功获取了最近日期的记录:
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
我想通过将 master
设置为 1
来更新这些记录。
我要执行的SELECT
和UPDATE
都适用于相同的table、downloads
我尝试了以下 MySQL - UPDATE query based on SELECT Query :
UPDATE downloads
(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
)
SET master = 1
但这给出了一个错误:
Error : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
' at line 2
我在上面 link 上尝试的其他解决方案更新了整个 table,因为我只是想更新从工作 SELECT
中检索到的记录。请有人帮我指明正确的方向吗?
试试这个
UPDATE downloads
SET master = 1
FROM
(
SELECT t1.master
FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC
LIMIT 1)
)
使用加入
update t1 SET t1.master = 1 from downloads as t1
join downloads as t2
on t2.url_id = t1.url_id
ORDER BY t2.created DESC LIMIT 1
你需要同时使用连接和更新来做这样的事情。尝试
UPDATE downloads d
JOIN (SELECT t1.id FROM downloads t1
WHERE t1.id = (SELECT t2.id
FROM downloads t2
WHERE t2.url_id = t1.url_id
ORDER BY t2.created DESC LIMIT 1
)
) a on d.id = a.id SET d.`master` = 1
这应该可行,也许您可以进一步优化提取最新记录的方式