插入时面临两行错误

时间:2017-11-06 11:38:18

标签: sql sql-server join

这是一个非常简单的问题。

INSERT INTO crm.dbo.UPDATE_DATA(NAME,OLD_ID) 
VALUES (
(   SELECT s.NAME FROM crm.dbo.SURROGATE as s
    INNER JOIN crm.dbo.UPDATE_DATA ON (s.ID != crm.dbo.UPDATE_DATA.OLD_ID)
    WHERE crm.dbo.UPDATE_DATA.OLD_ID IS NULL
),
(   SELECT SURROGATE.ID FROM crm.dbo.SURROGATE 
    LEFT JOIN crm.dbo.UPDATE_DATA ON (crm.dbo.SURROGATE.ID = crm.dbo.UPDATE_DATA.OLD_ID) 
    WHERE crm.dbo.UPDATE_DATA.OLD_ID IS NULL
)
)

当我执行上面的查询时,会出现以下错误

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

我可以理解错误,子查询返回多行,另一方面它逐行插入。

它的解决方案是什么?通过应用内连接而不是左连接,它不会通过错误。所以问题是为什么它的解决方案是内部联接。为什么不是别的。我不想在其上应用内部联接。并抱歉大量的内容。但是提前谢谢

2 个答案:

答案 0 :(得分:1)

使用select语句插入时不要使用值。改为使用Join语句。因为使用值时,一次只能提供一组。也许试试这个

INSERT INTO crm.dbo.UPDATE_DATA(NAME,OLD_ID) 
SELECT SURROGATE.name,SURROGATE.ID FROM crm.dbo.SURROGATE  
    LEFT JOIN crm.dbo.UPDATE_DATA ON (crm.dbo.SURROGATE.ID = crm.dbo.UPDATE_DATA.OLD_ID) 
    WHERE crm.dbo.UPDATE_DATA.OLD_ID IS NULL

答案 1 :(得分:1)

错误意味着您将单个结果值的结果视为单个插入命令的列的内容

但是看你的代码,你可以起诉一个简单的插入选择,只有一个选择列的结果,例如:

Insert Into crm.dbo.UPDATE_DATA(NAME,OLD_ID) 
select s.NAME,  s.ID 
from  crm.dbo.SURROGATE as s
inner join crm.dbo.UPDATE_DATA on s.ID!=crm.dbo.UPDATE_DATA.OLD_ID 
where crm.dbo.UPDATE_DATA.OLD_ID is null