Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 提取集合/列表中不在数据库中的值_Sql_Database_Postgresql - Fatal编程技术网

Sql 提取集合/列表中不在数据库中的值

Sql 提取集合/列表中不在数据库中的值,sql,database,postgresql,Sql,Database,Postgresql,我很清楚这有点尴尬,但我正在寻找一种方法来知道集合中哪些值不在我的数据库的表中,换句话说,我需要这样的东西:给定一个表“table”和一个列“column”,让我们假设“column”有一个{“a”,“b”}的域(这些是“column”的所有行所包含的值)以属性“column”为例,如果我们给它一个集合(怎么做?)(假设集合是{“a”,“b”,“c”,“d”}),返回的将是一个表“table”,其中有一列“column”,两个结果是行上的“c”和“d” 有没有可能通过sql请求实现这一点? 我想

我很清楚这有点尴尬,但我正在寻找一种方法来知道集合中哪些值不在我的数据库的表中,换句话说,我需要这样的东西:给定一个表“table”和一个列“column”,让我们假设“column”有一个{“a”,“b”}的域(这些是“column”的所有行所包含的值)以属性“column”为例,如果我们给它一个集合(怎么做?)(假设集合是{“a”,“b”,“c”,“d”}),返回的将是一个表“table”,其中有一列“column”,两个结果是行上的“c”和“d”

有没有可能通过sql请求实现这一点? 我想这在Oracle的双表上是可行的,但由于我在研究Postgres,我需要一些花哨的技巧


谢谢你的帮助

您可以使用该函数生成一种“虚拟表”

SELECT s.a as "column"
FROM generate_series(ascii('a'), ascii('d')) AS s("column")
LEFT OUTER JOIN mytable t
  ON chr(s."column") = t."column"
WHERE t."column" IS NULL;
该查询没有经过测试,但应该可以让您开始


请回复您的评论:

如果您有一个任意的值列表,而不是一系列连续的值,则可以将其转换为公共表表达式(此解决方案已由其他用户发布,但他们随后删除了其答案)


是的,您必须编写应用程序代码,以格式化输入值列表中的查询。

+1为了教我generate_series函数,我觉得我还没有清楚地解释我的想法,我的目标是输入一个列表(例如手动输入或从.csv文件输入),并将其值与数据库中的值进行比较(作为回报,有一个包含输入列表中而不是数据库中的值的表)。我认为这在pur SQL中是不可行的,我们需要第三方编程语言来完成这类工作。
WITH s AS (
  SELECT 'a' AS "column" UNION ALL
  SELECT 'b' UNION ALL
  SELECT 'c' UNION ALL
  SELECT 'd' 
)
SELECT s.a as "column"
FROM s
LEFT OUTER JOIN mytable t
  ON s."column" = t."column"
WHERE t."column" IS NULL;