无法分配第二个sql别名

无法分配第二个sql别名,sql,db2,alias,squirrel-sql,Sql,Db2,Alias,Squirrel Sql,在下面的示例中,我很难使用我的第二个别名。 我使用的是SquirrelSQL3.7 出错 错误:[SQL5001]列限定符或表T2未定义。SQLState: 42703错误代码:-5001 你是说 UPDATE myDatabaseOne.myTableOne t1 SET firstFieldToCopy = (SELECT DISTINCT alternateField FROM myDatabaseTwo.myTableTwo t2 WHERE t

在下面的示例中,我很难使用我的第二个别名。 我使用的是SquirrelSQL3.7

出错

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

你是说

UPDATE myDatabaseOne.myTableOne t1
    SET firstFieldToCopy = (SELECT DISTINCT alternateField 
        FROM myDatabaseTwo.myTableTwo t2
        WHERE t1.firstFieldToCopy = t2.alternateField);  
请注意……的位置。。。这就是t2别名不起作用的原因

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

UPDATE t1
SET t1.firstfieldtocopy = t2.alternatefield
FROM mydatabaseone.mytableone t1
JOIN mydatabasetwo.mytabletwo t2 on t1.firstfieldtocopy = t2.alternate field

不过我不明白你的逻辑。。设置copy=alternate,但您正在筛选copy=alternate的位置。

问题在于作用域<代码>t2只能在

(SELECT DISTINCT alternateField FROM myDatabaseTwo.myTableTwo t2)
这意味着当你说
WHERE t1.firstFieldToCopy=t2.alternateField
时,你的数据库管理系统对你指的东西没有任何线索

不过,查询仍有两个问题:

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

  • 您正在用相同的新值覆盖旧值(参见Aaron D的答案)


  • 你的逻辑有点错误。。需要向我们展示您的数据的外观以及您试图将其更改为的内容。。我不知道为什么人们会根据你提出的问题来回答这个问题provided@JamieD77好吧,所有的答案都回答了为什么他会犯错误。问题模糊的事实并不会使相关错误变得不那么明显。@JulienBlanchard好吧,josh的第一个答案可能是正确的路径。。我不知道这是干什么用的。。Aaron的第二个答案可能不会在db2中编译。。我想你有一些有用的信息。。
    (SELECT DISTINCT alternateField FROM myDatabaseTwo.myTableTwo t2)