【问题标题】:Update Statement with a order by and where clause使用 order by 和 where 子句更新语句
【发布时间】:2017-09-15 07:14:48
【问题描述】:

有人可以帮助我不断收到此错误: ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。 这是我正在使用的查询:

UPDATE  SMS 
SET idx30 = 'New' 
WHERE idx30 in 
(
  SELECT * 
  FROM SMS 
  WHERE idx30 IS NULL
    AND (idx15 = 'Del' OR idx15 = 'Fail')
    AND Idx13 <> '1'
    AND Idx7 >= DATEADD(day, -1, GETDATE()) 
  ORDER BY idx7 DESC
);

【问题讨论】:

  • 您真正使用的是哪个数据库.. ????您标记 mysql 但您的错误消息似乎是针对 Sql Server ..
  • 对不起应该只有sql
  • 我不知道为什么您的查询中需要 ORDER BY 语句
  • 您希望ORDER BY 子句有什么效果IN 询问“左边的表达式是否出现在右边集合中的任何位置?”。更改右侧集合的“顺序”会如何改变该问题的答案?
  • (即使修复了这个问题,从子查询中也可以清楚地看到 SMS 包含多个列 - 所以 SELECT * 也会出错 - column你想让IN 比较吗?)

标签: sql sql-server sql-update sql-order-by


【解决方案1】:

您可以只更新符合条件的行。不需要子查询或 ORDER BY。

UPDATE  SMS 
SET idx30 = 'New' 
WHERE (idx15 = 'Del' OR idx15 = 'Fail')
  AND Idx13 <> '1'
  AND Idx7 >= DATEADD(day, -1, GETDATE()) 

【讨论】:

    【解决方案2】:

    查询中的两个更正是:

    1. 由于查询中的 order by 子句导致出现顺序错误,这是语法错误。

    2. 你在子查询中写了 * 会再次抛出

    3. 的错误

    当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多