sql中使用if-exists语句的问题
我有两个表,一个叫做TEMP,另一个叫做MAIN。所以我要做的就是检查TEMP表中的所有记录是否都在主表中。逻辑应该是temp表中的所有记录也必须在主表中,但是当我在这里运行sql查询时;它没有给我任何记录,我知道临时表的主表中缺少记录。我做错了什么sql中使用if-exists语句的问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表,一个叫做TEMP,另一个叫做MAIN。所以我要做的就是检查TEMP表中的所有记录是否都在主表中。逻辑应该是temp表中的所有记录也必须在主表中,但是当我在这里运行sql查询时;它没有给我任何记录,我知道临时表的主表中缺少记录。我做错了什么 IF EXISTS(SELECT DISTINCT GRP_NM ,GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SE
IF EXISTS(SELECT DISTINCT GRP_NM
,GRP_VAL
FROM TEMP
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN)
)
BEGIN
INSERT INTO MAIN(GRP_NM, GRP_VAL )
SELECT GRP_NM
,GRP_VAL
FROM MAIN
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN)
END
我怀疑你的问题与空值有关。如果两个表中的GRP_NM或GRP_VAL都为null,那么GRP_NM+GRP_VAL将为null,并且您的in和EXISTS语句将完全阻塞 在任何情况下,请尝试以下方法:
INSERT MAIN (GRP_NM, GRP_VAL)
select GRP_NM, GRP_VAL
from TEMP
except select GRP_NM, GRP_VAL
from MAIN
我怀疑你的问题与空值有关。如果两个表中的GRP_NM或GRP_VAL都为null,那么GRP_NM+GRP_VAL将为null,并且您的in和EXISTS语句将完全阻塞 在任何情况下,请尝试以下方法:
INSERT MAIN (GRP_NM, GRP_VAL)
select GRP_NM, GRP_VAL
from TEMP
except select GRP_NM, GRP_VAL
from MAIN
在代码的第二部分中,您试图从同一个MAIN表而不是TEMP表中插入值。也许只是打字错误。 试着这样做:
IF EXISTS(SELECT DISTINCT GRP_NM, GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN))
BEGIN
INSERT INTO MAIN(GRP_NM, GRP_VAL )
SELECT GRP_NM, GRP_VAL FROM TEMP
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN)
END
在代码的第二部分中,您试图从同一个MAIN表而不是TEMP表中插入值。也许只是打字错误。 试着这样做:
IF EXISTS(SELECT DISTINCT GRP_NM, GRP_VAL FROM TEMP WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN))
BEGIN
INSERT INTO MAIN(GRP_NM, GRP_VAL )
SELECT GRP_NM, GRP_VAL FROM TEMP
WHERE GRP_NM + GRP_VAL NOT IN (SELECT GRP_NM + GRP_VAL FROM MAIN)
END
如果只从主部件运行SELECT GRP_NM,GRP_VAL,而GRP_NM+GRP_VAL不在SELECT GRP_NM+GRP_VAL中,会发生什么情况?您似乎也在重复相同的逻辑,我不确定您是否需要外部if exists。它不返回任何值,而且我知道几乎有28条记录丢失。当您仅从MAIN运行SELECT GRP_NM,GRP_VAL时会发生什么,其中GRP_NM+GRP_VAL不在SELECT GRP_NM+GRP_VAL FROM MAIN part中?你似乎也在重复同样的逻辑,我不确定您是否需要外部if。它不返回值,而且我知道几乎有28条记录丢失连接值的比较不是一个好主意:当'a'+'1'='a'+'1'时选择CASE,然后选择'TRUE'或'FALSE'结束。连接值的比较不是一个好主意:当'a'+'1'='a'时选择CASE“+”1“然后是“真”或“假”结束。