SQL : How to know if a set of values exist in database?

标签 sql sql-server-2008 set

我必须将文件中的行导入数据库。我必须检查外键是否存在。这是我应该导入的行示例:

A   481 11/23/1981  12  77000   DESCRIPTION_1     $5,098
A   482 11/23/1981  15  77000   DESCRIPTION_1     $5,098    
A   482 11/23/1981  12  77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  9   77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  12  77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  12  77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  1   77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  1   77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  1   77000   DESCRIPTION_1     $5,098
A   481 11/23/1981  1   77000   DESCRIPTION_1     $5,098

这里的外键是 12、15、9、12、1。我想检查这些外键是否之一。在示例中,外键 12 不存在。最简单的方法是逐行测试:

SELECT COUNT(*) From TypeTable WHERE IdType = 12 -- 0
SELECT COUNT(*) From TypeTable WHERE IdType = 15 -- 1
SELECT COUNT(*) From TypeTable WHERE IdType = 9  -- 1
SELECT COUNT(*) From TypeTable WHERE IdType = 12 -- 1
SELECT COUNT(*) From TypeTable WHERE IdType = 1  -- 1

此方法的问题是每个不同的外键都有一个查询,我应该导入的文件有数千行(可能还有数千个外键)。

所以我想知道是否可以使用“SQL 的集合特性”在一个查询中进行检索,但我不知道该怎么做...

PS:在我的查询结果中,我需要知道数据库中不存在外键

问候,

弗洛里安

最佳答案

如果数据已经加载到暂存表中,那么您可以使用它

SELECT
    *
FROM
   myStagingTable ST
WHERE
   NOT EXISTS (SELECT *
            FROM TypeTable TT
            WHERE ST.FKCol = TT.IdType)

要执行基于集合的操作,您需要一个包含所需 FK 值的表格。这可能是同一连接上的临时表,并通过扫描文件来填充。通过将 myStagingTable 更改为 #myFKTable

,相同的 SQL 可以在上面运行

关于SQL : How to know if a set of values exist in database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056950/

相关文章:

c++ - 使用自定义迭代器设置 vs vector

sql - 使 MS SQL Server 中的表仅可用于插入?

sql - 如何根据事件关联 3 个表

mysql - 自动从SQL Server 2008r2获取数据到mysql

sql - 用户定义的表类型插入有时会导致转换错误

asp.net - 显示错误填充 : SelectCommand. 连接属性尚未初始化

SQL:从两个历史表构建时间线的最佳方式

sql - 将单个 SQL Server 表中的行与其他行进行比较

java - 在java中将整数集转换为字符串

java - 是否有一个 Java 集合或列表可以在给定对象值的情况下返回对象键?