我难以在下面的示例中使用我的第二个别名。 我使用的是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;
答案 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个问题:
您的子查询最有可能返回2+个值,因为DISTINCT
不用于返回单个值,而是用于消除重复项。
你用相同的新值覆盖旧值(参见Aaron D的回答)。