Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 插入子查询can';t将引用绑定到目标表_Sql_Sql Server_Tsql_Where Clause_Sql Insert - Fatal编程技术网

Sql 插入子查询can';t将引用绑定到目标表

Sql 插入子查询can';t将引用绑定到目标表,sql,sql-server,tsql,where-clause,sql-insert,Sql,Sql Server,Tsql,Where Clause,Sql Insert,我试图将一个表中的两列合并到一个外键引用中,该外键引用指向另一个包含这两列的表。我首先想做一些事情,比如: INSERT INTO dbo.Securities (SubIndustID) SELECT ID FROM dbo.SubIndust WHERE dbo.SubIndust.GICS_Sector = dbo.Securities.GICS_Sector AND dbo.SubIndust.SubIndustry = dbo.Securiti

我试图将一个表中的两列合并到一个外键引用中,该外键引用指向另一个包含这两列的表。我首先想做一些事情,比如:

INSERT INTO dbo.Securities (SubIndustID) 
    SELECT ID FROM dbo.SubIndust
        WHERE dbo.SubIndust.GICS_Sector = dbo.Securities.GICS_Sector
        AND dbo.SubIndust.SubIndustry = dbo.Securities.SubIndustry;
对于目标表中某列的子查询中的每个引用,我都会收到一条错误消息:

无法绑定多部分标识符“dbo.Securities.GICS\u Sector”。

无法绑定多部分标识符“dbo.Securities.SubIndustry”。


为什么进行外键替换的正确方法是?

如果要在查询中的其他位置使用该表,则需要在
from
子句中提及该表。这将是一个语法更正确的版本:

INSERT INTO dbo.Securities (SubIndustID) 
    SELECT i.ID
    FROM dbo.SubIndust i JOIN
         dbo.Securities s
         ON i.GICS_Sector = s.GICS_Sector AND
            i.SubIndustry = s.SubIndustry;
但是,我怀疑您确实需要更新:

update s
    set s.SubIndustID = i.Id
    from dbo.Securities s JOIN
         dbo.SubIndust i
         on i.GICS_Sector = s.GICS_Sector AND
            i.SubIndustry = s.SubIndustry;
伟大的(当然,您也正确地认为这实际上应该是一个UPDATE语句。