首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL :如何知道数据库中是否存在一组值?

SQL :如何知道数据库中是否存在一组值?
EN

Stack Overflow用户
提问于 2011-05-19 18:02:53
回答 3查看 2.1K关注 0票数 3

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

代码语言:javascript
复制
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不存在。最简单的方法是逐行测试:

代码语言:javascript
复制
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

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

所以我想知道是否有可能使用"set feature of SQL“在一个查询中检索,但我不知道如何做到这一点…

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

致以敬意,

弗洛里安

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-19 18:07:46

如果数据已加载到临时表中,则可以使用以下命令

代码语言:javascript
复制
SELECT
    *
FROM
   myStagingTable ST
WHERE
   NOT EXISTS (SELECT *
            FROM TypeTable TT
            WHERE ST.FKCol = TT.IdType)

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

票数 4
EN

Stack Overflow用户

发布于 2011-05-19 18:07:55

我会将数据批量加载到数据库中的临时临时表中,然后就变成了使用外部连接运行SELECT的简单情况:

代码语言:javascript
复制
SELECT DISTINCT s.ForeignKeyField
FROM YourStagingTable s
    LEFT JOIN FKTable f ON s.ForeignKeyField = f.ID
WHERE f.ID IS NULL -- where the foreign key value does not exist
票数 3
EN

Stack Overflow用户

发布于 2011-05-19 18:07:18

是否将查询参数化并将外键作为参数传递?

代码语言:javascript
复制
IF EXISTS (SELECT * FROM TypeTable WHERE IdType = @foreignKey)

如果将其放入一个函数中,则可以使用CROSS APPLY命令为集合的每一行调用该函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6056950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档