如果存在或不存在记录,则应将这些记录与状态一起插入到临时表中.I am looking for very high performance query, because this SP is being called online with many users. Please help me.

我有一个临时表和一个主表,我需要与主表进行比较,如果存在记录,则状态应为"有效",如果不存在,则状态需要为"无效".

MainRecords:在此表中,CorrectNumber列可能会以不同的日期重复,如下所述:

我正在寻找的最终输出应如下所示:

#TempReferencIds:

'8273648','3333333',’INVALID’
'3434448','1111111', ’INVALID’
'2244448','2222222', ’INVALID’
'10101010','7003594558',’VALID’
'20202020','7003310682',’VALID’
'30303030','6130985705',’VALID’

这就是我已经try 过的--但它没有显示出我所期望的正确结果,如上表所述:

CREATE TABLE MainRecords
(
        CorrectNumber nvarchar(20),
        name nvarchar(20),
        Date nvarchar(20)
)

INSERT INTO MainRecords VALUES ('7003594558', 'sssss', GETDATE())
INSERT INTO MainRecords VALUES ('7003310682', 'gfdga', GETDATE())
INSERT INTO MainRecords VALUES ('7003310682', 'gfdga', GETDATE()- 17)
INSERT INTO MainRecords VALUES ('6130985705', 'fdgfd', GETDATE())
INSERT INTO MainRecords VALUES ('6130985705', 'fdgfd', GETDATE()-1)
INSERT INTO MainRecords VALUES ('6130985705', 'fdgfd', GETDATE()-3)

CREATE TABLE #InputRecords
(
    InCorrectNumber varchar(20),
    CorrectNumber nvarchar(20)
)

INSERT INTO #InputRecords VALUES ('8273648', '3333333')
INSERT INTO #InputRecords VALUES ('3434448', '1111111')
INSERT INTO #InputRecords VALUES ('2244448', '2222222')
INSERT INTO #InputRecords VALUES ('10101010', '7003594558')
INSERT INTO #InputRecords VALUES ('20202020', '7003310682')
INSERT INTO #InputRecords VALUES ('30303030', '6130985705')

CREATE TABLE #TempReferencIds
(
    InCorrectNumber varchar(20),
    CorrectNumber nvarchar(20),
    Status nvarchar(10),
)

IF (EXISTS(SELECT 1 
           FROM [dbo].MainRecords a 
           JOIN #InputRecords b ON a.CorrectNumber = b.CorrectNumber)) 
BEGIN
    INSERT INTO #TempReferencIds (InCorrectNumber, CorrectNumber, Status)
        SELECT t.InCorrectNumber, t.CorrectNumber, 'VALID' 
        FROM [dbo].MainRecords a 
        JOIN #InputRecords t ON a.CorrectNumber = t.CorrectNumber
 END
 ELSE
 BEGIN
     INSERT INTO #TempReferencIds (InCorrectNumber, CorrectNumber, Status)
         SELECT t.InCorrectNumber, t.CorrectNumber, 'INVALID' 
         FROM [dbo].MainRecords a 
         JOIN #InputRecords t ON a.CorrectNumber <> t.CorrectNumber
END

SELECT * FROM #TempReferencIds

推荐答案

try 下面的查询

INSERT INTO #TempReferencIds (InCorrectNumber, CorrectNumber, Status)
SELECT t.InCorrectNumber, t.CorrectNumber, 'VALID' 
FROM [dbo].MainRecords a 
JOIN #InputRecords t ON a.CorrectNumber = t.CorrectNumber
UNION
SELECT t.InCorrectNumber, t.CorrectNumber, 'INVALID' 
FROM [dbo].MainRecords a 
RIGHT JOIN #InputRecords t ON a.CorrectNumber = t.CorrectNumber
WHERE a.CorrectNumber IS NULL

Sql相关问答推荐

SQL查询组类值在同一行中,并连接和排序其他值

SQL使最终结果显示两个表后的所有数据(匹配和不匹配)?

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

如何根据计数和分组获取订单总数

如何根据同一表中某一列中的值重新排列行(仅输出它们)(重新排序)?

收到%1、%2或%2邮箱的唯一客户

对列进行排序后,基于两列删除重复行

在查询Oracle SQL中创建替代ID

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

按连续相等值分组排序

在UNION查询中查找MIN

如何在Postgres中为单值输入多行?

用VB.NET在Dapper中实现MS Access数据库顺序透视

输出连续出现两次以上的行

在Snowflake中如何使用SQL对版本字符串进行排序?

Snowflake 中的对象是如何比较的?

在 BigQuery 数据集中查找表大小和占总数据集大小的百分比

并非所有变量都绑定在 PL SQL 函数中

SQL - 使用子查询返回多行的 LIKE 命令

从 Pyspark 转换为具有多个分组条件的语句时的情况