我正在尝试使用以下命令更新具有最高开始日期的成员行:
UPDATE at_section_details a
SET a.sd_end_date = ?
, a.sd_details = ?
WHERE a.cd_id = ?
AND a.sd_start_date = (SELECT MAX(b.sd_start_date)
FROM at_section_details b
WHERE b.cd_id = ?)
错误消息是: " updateYMGroup中的SQLException:java.sql.SQLException:您不能指定目标表' a'用于FROM子句中的更新
表结构是: sd_id - 主键
cd_id - 外键(多次出现)
sd_section
sd_pack
sd_start_date
sd_end_date
sd_details
成员(cd_id)可以启动然后转出。 然后该成员可以再次转入(新的开始日期)。当他们转出时,我们想要拿出最大开始日期来转出。
非常感谢任何协助。
此致
格林
答案 0 :(得分:2)
您应该能够将LIMIT语句与ORDER BY一起使用。这些方面的东西:
UPDATE at_section_details a
SET a.sd_end_date=?, a.sd_details=?
WHERE a.cd_id=?
ORDER BY a.sd_start_date DESC
LIMIT 1
答案 1 :(得分:1)
如同帖子MySQL Error 1093 - Can't specify target table for update in FROM clause
所述在My SQL中,您无法使用在子查询中更新的同一个表进行更新。
我会尝试将您的子查询更改为此类
(Select x.* from (select max...) as x)
很抱歉缩写代码,我在手机上。
答案 2 :(得分:1)
此查询应该有效:
UPDATE at_section_details
JOIN (
SELECT cd_id, MAX(sd_start_date) sd_start_date
FROM at_section_details
WHERE cd_id = ?
GROUP BY cd_id
) AS t2 USING (cd_id, sd_start_date)
SET sd_end_date=?, sd_details=?;
答案 3 :(得分:0)
你可以尝试这个伴侣:
UPDATE at_section_details SET sd_end_date = <input>, sd_details = <input>
WHERE cd_id IN (
SELECT cd_id FROM at_section_details
WHERE cd_id = <input>
ORDER BY sd_start_date DESC
LIMIT 1
);