1

所以我正在编写一个基于特定条件插入和更新的脚本。我已经完成了插入语句,但很难让我的 UPDATE 语句在 CTREEACE DATABASE 脚本部分中工作。如果有任何熟悉 ctree 的人可以提供帮助,请看一下我的语法是否有问题。

UPDATE act
SET tbl71.address = act.address
FROM act
INNER JOIN tbl71 ON act.address = tbl71.address
WHERE dates = '7/31/2018'

act view 
----------
trackingid(varchar)
delivery_time(varchar)
state(varchar)
address(varchar)                             
city(varcahr)
zipcode(varchar)
dates(varchar)

tbl71 view 
----------
trackingid(varchar)
delivery_time(varchar)
state(varchar)
address(varchar)
city(varcahr)
zipcode(varchar)
dates(varchar)

如果根据 tbl71 的 act 视图中的日期存在地址,则从 tbl71 更新 act 中的所有列

4

1 回答 1

0

在开始时检查以下 8 条规则:

  1. 视图是基于一个且只有一个表定义的
  2. 视图必须包含创建视图所基于的表的 PRIMARY KEY
  3. 视图不应包含由聚合函数组成的任何字段
  4. 视图的定义中不能有任何 DISTINCT 子句
  5. 视图的定义中不能有任何 GROUP BY 或 HAVING 子句
  6. 视图的定义中不能有任何 SUBQUERIES
  7. 如果您要更新的视图基于另一个视图,则后者应该是可更新的。(视图的)任何选定的输出字段都不得使用常量、字符串或值表达式

下一个问题是你为什么要尝试使用from (act) 从另一个视图(tbl71)更新列,但这取决于你。

如果这个例子不起作用,没关系:

UPDATE act
SET act.address = tbl71 .address
FROM act
INNER JOIN tbl71 ON act.address = tbl71.address
WHERE dates = '7/31/2018'

尝试查看这个简单查询的结果以查看联合或连接是否有效:

    SELECT *
    FROM act
    INNER JOIN tbl71 ON act.address = tbl71.address

在此之后尝试添加 *“Where”:

SELECT *
FROM act
INNER JOIN tbl71 ON act.address = tbl71.address
WHERE dates = '7/31/2018'

最后尝试进入更新。最简单的方法是重新创建视图(制作 1 个视图而不是 2 个,这将获得您需要的最终数据。)

于 2018-08-09T15:04:02.267 回答