【问题标题】:Cannot assign the second sql alias无法分配第二个 sql 别名
【发布时间】:2015-11-24 20:28:08
【问题描述】:

我很难让我的第二个别名在下面的示例中工作。 我正在使用松鼠 SQL 3.7

遇到错误

错误:[SQL5001] 列限定符或表 T2 未定义。 SQL状态: 42703 错误代码:-5001

UPDATE myDatabaseOne.myTableOne t1
SET 
    firstFieldToCopy = (SELECT DISTINCT alternateField FROM myDatabaseTwo.myTableTwo t2)
WHERE t1.firstFieldToCopy = t2.alternateField;  

【问题讨论】:

  • 您的逻辑有点不对劲.. 需要向我们展示您的数据是什么样的以及您试图将其更改为什么.. 我不知道为什么人们会根据您提供的查询
  • @JamieD77 好吧,所有答案都回答了他为什么会遇到错误。问题含糊不清这一事实并没有使相关错误变得不那么明显。
  • @JulienBlanchard 好吧,josh 的第一个答案可能是正确的路径.. 不确定不同的是什么.. Aaron 的第二个答案可能不会在 db2 中编译.. 我猜你的有一些有用的信息..

标签: sql db2 alias squirrel-sql


【解决方案1】:

你是说……

UPDATE myDatabaseOne.myTableOne t1
    SET firstFieldToCopy = (SELECT DISTINCT alternateField 
        FROM myDatabaseTwo.myTableTwo t2
        WHERE t1.firstFieldToCopy = t2.alternateField);  

注意 ) 的位置...这就是 t2 别名不起作用的原因...

否则,查询会混淆您的意图。

【讨论】:

    【解决方案2】:
    UPDATE t1
    SET t1.firstfieldtocopy = t2.alternatefield
    FROM mydatabaseone.mytableone t1
    JOIN mydatabasetwo.mytabletwo t2 on t1.firstfieldtocopy = t2.alternate field
    

    虽然我不明白你的逻辑.. 设置复制 = 备用,但你已经过滤到复制 = 备用的位置。

    【讨论】:

      【解决方案3】:

      问题在于范围界定。 t2 只能在

      内访问
      (SELECT DISTINCT alternateField FROM myDatabaseTwo.myTableTwo t2)
      

      这意味着当您说WHERE t1.firstFieldToCopy = t2.alternateField 时,您的 DBMS 不知道您指的是什么。

      查询仍然存在 2 个问题:

      1. 您的子查询很可能返回 2+ 个值,因为 DISTINCT 不用于返回单个值,而是用于消除重复项。

      2. 您正在用相同的新值覆盖旧值(请参阅 Aaron D 的回答)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 2019-10-04
        相关资源
        最近更新 更多