【问题标题】:An expression of non-boolean type specified in a context where a condition is expected, near ')'. error in SQL在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'。 SQL 中的错误
【发布时间】:2020-03-31 01:53:33
【问题描述】:

我需要从两个表(客户端和活动)中找到匹配的 id,并将表客户端中的(clientid)列中的数据更新到另一个表(活动)的同一列(id):

update activity
set a.clientid = r.clientid 
where (select r.clientid, r.id 
       from request r 
       where exists(select a.activityid from activity a where (a.id = r.id))

抛出异常

在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'

【问题讨论】:

  • where exists() 必须是 where exists() = 1 - 您需要将此 exists 表达式与 BIT 值(0 或 1)进行比较
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 停止尝试编写您的总体目标并从给定的代码中解释您的期望以及原因。
  • 缺少)。如果那是一个帖子组合错字而不是你跑的——你检查过手册中的语法和限制吗?始终阅读您正在使用的手册重新功能。

标签: sql sql-server join sql-update


【解决方案1】:

没有样本数据很难确定,但看起来您正在寻找

UPDATE activity a
JOIN request r ON r.id = a.id
SET a.clientid = r.clientid

【讨论】:

    【解决方案2】:

    我想你想要更新 join。在 SQL Server 中,这看起来像:

    update a
        set clientid = r.clientid 
    from activity a join
         request r
         on a.id = r.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多