【问题标题】:SQL : Update table with selectSQL:使用选择更新表
【发布时间】:2015-10-04 05:54:50
【问题描述】:

我有这样的查询

UPDATE t_prd_cost_compare 
SET 
    2015_AUG_PRD_UNIT_PRICE=i.PRD_UNIT_PRICE, 
    2015_AUG_PRD_SELLING_PRICE=i.PRD_SELLING_PRICE,
    2015_AUG_PRD_IN_PATIENT_LIST_PRICE=i.PRD_IN_PATIENT_LIST_PRICE,
    2015_AUG_PRD_OUT_PATIENT_LIST_PRICE=i.PRD_OUT_PATIENT_LIST_PRICE
FROM (
    SELECT PRODUCTID,PRD_UNIT_PRICE,PRD_SELLING_PRICE,PRD_IN_PATIENT_LIST_PRICE,PRD_OUT_PATIENT_LIST_PRICE
    FROM t_product_catalog
    LEFT JOIN T_adjust ON IAJ_PRODUCTID=PRODUCTID AND IAJ_ADJNO IS NULL
    WHERE PRODUCTID>1 AND (DATE(IAJ_DATE) = '2015-01-01')
    GROUP BY IAJ_PRODUCTID
    ) AS i
WHERE i.PRODUCTID = t_prd_cost_compare.PRODUCTID

我收到这样的错误

错误代码:1064
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'FROM ( 在第 7 行选择 PRODUCTID,PRD_UNIT_PRICE,PRD_SELLING_PRICE,PRD_IN_PATIENT_LIST_PRI'

我检查了select语句是否正确,但我仍然得到错误!

有什么想法吗?

【问题讨论】:

  • UPDATE 语句中没有 FROM。尝试改用 JOIN。
  • 一个好的经验法则:如果没有聚合,并且您不知道自己在做什么,请不要使用 GROUP BY

标签: mysql sql


【解决方案1】:

问题解决了,解决办法在这里

Update
  Competition as C
  inner join (
    select CompetitionId, count(*) as NumberOfTeams
    from PicksPoints as p
    where UserCompetitionID is not NULL
    group by CompetitionID
  ) as A on C.CompetitionID = A.CompetitionID
set C.NumberOfTeams = A.NumberOfTeams

来自:mysql update query with sub query

【讨论】:

  • 我认为我们无法从 that 的问题中猜到 this 的答案,但无论如何我们都会弄明白的跨度>
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多