我有下面的查询在mysql中,我想检查如果分支id和年的财务类型从branch_master是等于分支id和年的经理然后更新状态在经理表对分支id在经理
UPDATE manager as m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
SELECT m2.branch_id FROM manager as m2
WHERE (m2.branch_id,m2.year) IN (
(
SELECT DISTINCT branch_id,year
FROM `branch_master`
WHERE type = 'finance'
)
)
)
但是犯了错误
表“m1”被指定了两次,既作为“更新”的目标,也作为单独的数据源
尝试使用EXISTS
操作符:
UPDATE manager as m1
SET m1.status = 'Y'
WHERE EXISTS (SELECT 1
FROM (SELECT m2.branch_id
FROM branch_master AS bm
JOIN manager AS m2
WHERE bm.type = 'finance' AND
bm.branch_id = m2.branch_id AND
bm.year = m2.year) AS t
WHERE t.branch_id = m1.branch_id);
注意:查询使用@Thorsten建议的附加嵌套级别,作为绕过表指定错误的一种方法。
这里是演示
正确答案在这篇SO文章中。
这里接受的答案的问题是——正如已经多次提到的那样——创建整个表的完整副本。这远远不是最优的,也是最复杂的。其想法是将仅用于更新的数据子集具体化,因此在您的情况下,它将如下所示:
UPDATE manager as m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
SELECT * FROM(
SELECT m2.branch_id FROM manager as m2
WHERE (m2.branch_id,m2.year) IN (
SELECT DISTINCT branch_id,year
FROM `branch_master`
WHERE type = 'finance')
) t
)
基本上,您只需将以前的数据查询源封装在
SELECT * FROM (...) t
这是一个典型的MySQL事情,通常可以通过从派生的表中选择来规避,即而不是
FROM manager AS m2
使用
FROM (select * from manager) AS m2
完整声明:
UPDATE manager
SET status = 'Y'
WHERE branch_id IN
(
select branch_id
FROM (select * from manager) AS m2
WHERE (branch_id, year) IN
(
SELECT branch_id, year
FROM branch_master
WHERE type = 'finance'
)
);
问题内容: 我有以下MySQL查询,我要检查,如果 分支ID 和 年度 的 财务 从类型 branch_master 与平等的 分支ID 和 年 的 经理 ,然后更新状态在 管理 表中对 分公司的ID 在 经理 但出现错误 表’m1’被指定两次,既作为’UPDATE’的目标,又作为数据的单独源 问题答案: 这是典型的MySQL问题,通常可以通过从派生表中进行选择来规避,例如 采用 完整的声明:
问题内容: 我有两个表需要相同的值以实现非规范化。 这是查询。 第一张桌子 第二张桌子 如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 无论如何将两个更新合并为一个? 问题答案: 如文档中所述,应该可以进行多表更新。 http://dev.mysql.com/doc/refman/5.5/en/update.html 注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦
问题内容: 我正在努力寻找解决此MySQL问题的方法。我似乎无法理解该怎么做。我有下表。 如果可能的话,我想将问题答案显示为每个结果集的列,如下所示。 任何帮助将非常感激。 谢谢 问题答案: SQLFiddle演示 如果您不清楚问题的数量( 例如Matei Mihai所说的1000个 ),则非常需要动态版本。 SQLFiddle演示 输出值
Etity公司 服务 Impl @服务公共类DateFMailServiceImpl实现DateFMailService{ } 存储库 @Repository公共接口DateFMailRepository扩展JpaRepository } 邮件分离器 控制器 保存运行程序 我已经纠正了我的问题。我已经在这里粘贴了所有与我的问题相关的代码。对于初学者,我只想将存储库的查询结果输出到控制台。但在我刚刚
我怀疑存在性能问题,特别是当长时间运行的API击中控制器时。 是否可以将作业作为单独的进程。让spring boot应用程序具有繁重工作的最佳实践是什么。
我有两份清单: 我想要一个新的名单,比如: 我尝试了以下方法: 但有一些严重的错误