比较同一数据库中的两个表,然后在不重复输入的情况下将其与另一个表进行比较

时间:2019-07-09 03:08:24

标签: c# sql-server

我正在使用SQL Server,Visual Studio,C#在RFID阅读器上做一个项目。我有一个名为rfid的数据库,其中包含三个表table1,table2和table3。

table1填充了固定标签的详细信息,并且这些条目不会更改。每个rfid标签都有一个相同的代码,称为EPC编号,我们可以用它来识别它们。

Table3填充了RFID读取器读取的标签条目。 table1和table3之间的唯一变化是table1是固定表,我们已经尽早给出了这些条目。但是table3总是充满读取器的读取操作,然后需要几秒钟的时间来填充。

比较它们时,

Table2用表1和表3中的差异条目填充。我尝试了常用的表比较方法并将条目带到table2,但是问题是由于在阅读器中连续读取标签,因此条目在table2中重复出现。我想阻止那个。还有另一件事是,由于需要花费几秒钟来填充table3,所以显示出一些错误的标签作为区别。

作为示例,我尝试了常用的表比较方法,并向table2接收条目,但是问题是由于读者不断读取标签,因此条目在table2中重复出现。我想阻止那个。而另一件事是,由于花费了几秒钟来填充table3,因此显示出一些错误的标签作为区别。举个例子。假设table1中有10个条目。并且我们给了相同的8个标签以供读取,包括表2中。所以现在根据我的代码,我期望table2中只有两个不同的标记条目。但是有两个以上的条目。这样做的原因是,table3是一种或一种方式填充,但不是一次填充全部8个标记。然后,一旦标签详细信息出现在表格3中,就开始比较。然后,将其余9个标签作为区别。

现在我要停止这两个中断的情况。

con = new SqlConnection(Constants.ConnectionString);
con.Open();

SqlCommand comp = new SqlCommand("INSERT INTO table2 (EPC, identificationcount, RSSI) SELECT EPC, identificationcount, RSSI FROM table1 WHERE NOT EXISTS (SELECT 1 FROM table3 WHERE table1.EPC = table3.EPC)", con);
comp.ExecuteNonQuery();
con.Close();

1 个答案:

答案 0 :(得分:0)

您可以使用Table1和Table3的联接来创建视图。我使用表变量,因此表名前面有@符号。如果使用实表,则可以省略@符号。

DECLARE @Table1 TABLE (RFID INT)
DECLARE @Table3 TABLE (RFID INT)

INSERT @Table1 VALUES (1), (2), (3), (4), (5)
INSERT @Table3 VALUES (1), (1), (1), (2), (2), (5), (6), (6)

-- only missing RFID in Table3
SELECT T1.*
FROM @Table1 T1 LEFT JOIN @Table3 T3 ON T1.RFID = T3.RFID
WHERE T3.RFID IS NULL

-- missing RFID in both tables
SELECT DISTINCT T1.*, T3.*
FROM @Table1 T1 FULL OUTER JOIN @Table3 T3 ON T1.RFID = T3.RFID
WHERE T3.RFID IS NULL OR T1.RFID IS NULL