插入表中未包含在另一个中的值

时间:2017-01-27 19:56:27

标签: sql sql-server tsql

我试图将数据从另一个表中插入一个表

INSERT INTO test(CRED_NUMERO, GRP_NUMERO, ARE_NUMERO, CRACTI_NUMERO, CRAC_DIFPORGRUPO, 
JORN_NUMERO, TURN_NUMERO, CRAC_QTDTOTALACESSOS, CRAC_QTDACESSOS, CRAC_VERFSENHA, 
CRAC_VERFDIGITAL, CRAC_ULTPASSAGEM, CRAC_ULTPASSAGEMPONTO)
VALUES ((SELECT PES_NUMERO FROM PESSOAS WHERE PES_NUMERO NOT IN (SELECT CRED_NUMERO 
FROM CRED_ACESSO)),'1', '1', '1', NULL,NULL,NULL,'999', '0', '0', '0',
'2016-08-20 20:02:00.000','2000-01-01 00:00:00.000')

但是,在运行查询时,会显示以下错误

  

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

我之前已经阅读了有关同一错误的问题,建议使用" IN"而不是" ="但是,选择查询具有NOT IN。你能帮帮我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:4)

而不是insert . . . values,使用insert . . select

INSERT . . .
    SELECT PES_NUMERO, ,'1', '1', '1', NULL, NULL, NULL, '999', '0', '0', '0',
           '2016-08-20 20:02:00.000', '2000-01-01 00:00:00.000'
    FROM PESSOAS
    WHERE PES_NUMERO NOT IN (SELECT CRED_NUMERO FROM CRED_ACESSO);

注意:我强烈建议您使用NOT EXISTS而不是NOT IN。如果NOT IN永远CRED_NUMERO,则NULL不会返回任何行。以下只是一个好习惯,所以你永远不会遇到这个问题:

INSERT . . .
    SELECT pPES_NUMERO, ,'1', '1', '1', NULL, NULL, NULL, '999', '0', '0', '0',
           '2016-08-20 20:02:00.000', '2000-01-01 00:00:00.000'
    FROM PESSOAS p
    WHERE NOT EXISTS (SELECT 1 CRED_ACESSO ca WHERE p.PES_NUMERO = ca.CRED_NUMERO);