无法分配第二个sql别名

时间:2015-11-24 20:28:09

标签: sql db2 alias squirrel-sql

我难以在下面的示例中使用我的第二个别名。 我使用的是Squirrel SQL 3.7

收到错误

  

错误:[SQL5001]列限定符或表T2未定义。 SQLSTATE:   42703 ErrorCode:-5001

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

3 个答案:

答案 0 :(得分:2)

你的意思是......

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

请注意...的位置...这就是为什么t2别名不起作用......

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

答案 1 :(得分:0)

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的位置。

答案 2 :(得分:0)

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

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

这意味着,当您说WHERE t1.firstFieldToCopy = t2.alternateField时,您的DBMS没有提到您所指的内容。

但查询仍有2个问题:

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

  2. 你用相同的新值覆盖旧值(参见Aaron D的回答)。