带有WHERE EXISTS的SQL UPDATE语句

use*_*145 11 sql sql-server

我试图写一个更新日期的查询,只有当我更新组的LINE_CD为50.我会这样做吗?

UPDATE EMPLOYER_ADDL  
SET EMPLOYER_ADDL.GTL_UW_APPRV_DT = EMPLOYER_ADDL.DNTL_UW_APPRV_DT 
WHERE EXISTS
    ( 
      SELECT EMP_PLAN_LINE_INFO.LINE_CD
      FROM EMP_PLAN_LINE_INFO
      Where EMP_PLAN_LINE_INFO.GR_NBR = EMPLOYER_ADDL.GR_NBR and
       EMP_PLAN_LINE_INFO.LINE_CD = 50
     )
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 14

UPDATE ea
  SET GTL_UW_APPRV_DT = DNTL_UW_APPRV_DT
  FROM EMPLOYER_ADDL AS ea
  WHERE EXISTS
  (
    SELECT 1
      FROM EMP_PLAN_LINE_INFO AS ep
      WHERE ep.GR_NBR = ea.GR_NBR
      AND ep.LINE_CD = 50
  );
Run Code Online (Sandbox Code Playgroud)

但是,如果您可以从查询中获取此信息,为什么要更新表?似乎这样必须经常运行,否则风险就会过时.

  • 在EXISTS内部,列名无关紧要.你可以说*,NULL,'常数'等.1不是列名.如果架构发生了变化,并且你在那里提到了一个明确的列名,那么**是不是**更适合未来? (6认同)
  • @StackOverflow用户,我给出了一个理由,为什么在我投票的时候我对你的答案进行了低估.您错过了"FROM",并且您不需要"SET"中的别名或表名.请不要在另一个人的回答中询问有关您的答案的问题. (3认同)
  • 你应该明确提到列名.如果将来更改架构会怎样?所以不应该是1,而应该是列名...... (2认同)
  • @StackOverflowUser - 这个实例无关紧要.他正在使用`1`,因为`EXISTS`短路,我们实际上并没有返回该字段.我们想知道的是,一排符合列出的条件吗? (2认同)
  • @BillOrtell该语法适用于Oracle,但不适用于SQL Server. (2认同)

xbr*_*ady 9

那这个呢?

UPDATE ea  
SET ea.GTL_UW_APPRV_DT = ea.DNTL_UW_APPRV_DT 
FROM EMPLOYER_ADDL ea
    INNER JOIN EMP_PLAN_LINE_INFO ei ON(ei.GR_NBR = ea.GR_NBR)
WHERE 
ei.LINE_CD = 50
Run Code Online (Sandbox Code Playgroud)


AJP*_*AJP 7

我相信这会给你相同的结果.

UPDATE ea
  SET GTL_UW_APPRV_DT = DNTL_UW_APPRV_DT
  FROM EMPLOYER_ADDL AS ea
  INNER JOIN EMP_PLAN_LINE_INFO AS ep
      ON ep.GR_NBR = ea.GR_NBR
      AND ep.LINE_CD = 50
Run Code Online (Sandbox Code Playgroud)

  • 请求downvote的原因,以便我可以了解我做错了什么. (4认同)
  • 我没有做下来投票,但我认为无论是谁做了它也可能是因为你的原始格式不好?我们同时发布了几乎相同的东西,所以我不知道为什么你得到了投票. (2认同)