【发布时间】:2023-01-12 16:48:20
【问题描述】:
我有 bd hf3 和 5 个表:
active_preset 列 (id , preset_id)
preset 带列(id、birja_id、trend_id、分形、interval_up)
birja 带列(id,名称)
trend 带列(id,名称)
uq_active_preset 带列(id、birja、trend、fractal、interval_up)
在preset表中我有几条记录。其中一些通过外键 preset_id 在表 active_preset 中。 active_preset表中有几条记录只存在一次,多于一次。
我需要用表 active_preset 中的记录更新表 uq_active_preset,忽略重复的记录(如果存在)。
我确实从active_preset查询过,效果很好:
SELECT
b.name AS birja, p.fractal AS fractal , tre.name AS trend, p.interval_up AS interval_up
FROM hf3.active_preset AS ap
INNER JOIN hf3.preset AS p on p.id = ap.preset_id
INNER JOIN hf3.birja AS b on b.id = p.birja_id
INNER JOIN hf3.trend AS tre on tre.id = p.trend_id
GROUP BY b.name, p.fractal, tre.name, p.interval_up
HAVING COUNT(*) >= 1
但是不知道怎么更新uq_active_preset
我试过了,它返回语法错误:1064:
UPDATE hf3.uq_active_preset uap SET
uap.birja = st.birja ,
uap.fractal = st.fractal,
uap.trend = st.trend,
uap.interval_up = st.interval_up,
FROM (SELECT b.name AS birja, p.fractal AS fractal , tre.name AS trend, p.interval_up AS interval_up
from hf3.active_preset AS ap
INNER JOIN hf3.preset AS p on p.id = ap.preset_id
INNER JOIN hf3.birja AS b on b.id = p.birja_id
INNER JOIN hf3.trend AS tre on tre.id = p.trend_id
GROUP BY b.name, p.fractal, tre.name, p.interval_up
HAVING COUNT(*) >= 1
) st
【问题讨论】:
-
MySQL <> SQL 服务器(MS SQL)。删除不匹配的标签。
-
错误 1064 声称您使用的是 MySQL。如果是这样,那么研究UPDATE Statement - >“多表语法”。
标签: mysql sql sql-server sql-update