【发布时间】:2019-04-07 15:24:47
【问题描述】:
我正在尝试更改数据库中的一些记录,但遗憾的是我的 sql 知识有点有限。在网上搜索和阅读内容后,我设法编写了一个选择语句,在其中我可以找到我想要更新的记录,但我不明白编写更新语句的逻辑来做到这一点。我必须做几个类似的更新声明,所以我希望这个我能自己弄清楚其余的
这是我的选择语句:
SELECT
MG.id,
MG.status,
MG.fin,
MG.execDateTime,
EXISTS
(
SELECT 1
FROM Mtask T
JOIN MTaskHis TH ON TH.t_id= T.id
WHERE T.tg_id = MG.id
AND YEAR(TH.dateTime) = 2019
) AS hasExecStart,
NMG.id,
NMG.execDateTime,
EXISTS
(
SELECT 1
FROM Mtask T
JOIN MTaskHis TH ON TH.t_id = T.id
WHERE T.tg_id = NMG.id
AND YEAR(TH.dateTime) = 2019
) AS hasExecNext
FROM Management_Group MG
JOIN MT_Groupman MTGM ON
MG.tgm_id = MTGM.id
LEFT JOIN Management_Group NMG ON MTGM.id =
NMG.tgm_id AND YEAR(NMG.execDateTime) = 2019
JOIN Management_Man MM ON MTGM.man_id = MM.id
JOIN Location L ON MM.location_id = L.id
WHERE L.org_id = 69
AND MG.stat != 'DELETED'
AND YEAR(MG.execDateTime) = 2018
AND MM.Type= 9
AND MG.fin != 1
AND EXISTS
(
SELECT 1
FROM Mtask T
WHERE T.tg_id = MG.id
AND T.stat = 'execution'
)
HAVING hasExecNext = 0 AND hasExecStart = 1
我知道 sql 中的标准更新:
UPDATE <TABLENAME>
SET <fieldName> = <value>
WHERE <conditons>
除非我不知道如何将我所做的这个选择语句转换为更新语句,原因是: - 我在哪里将存在的别名放在更新语句中 - 我也不明白何时何地将所有 JOINS 放在 from 语句中 - HAVING呢
像这样进行联合更新的最佳方法是什么?
【问题讨论】:
-
为什么是
HAVING子句?你似乎不想分组。 -
我这样做是为了查看一个小组是否在当年完成了任务。
-
我不知道,但我怀疑你想把它推到
WHERE子句中(在那里重复子查询,你不能在那里使用别名)。
标签: mysql sql select sql-update