我很清楚这有点尴尬,但我正在寻找一种方法来了解一组中不在我的数据库表中的值,换句话说,我需要这样的东西:给定一个表“table”和列“column”,假设“column”具有{“a”,“b”}的域(这些是“column”的所有行对属性“column”采用的值)如果我们把它交给一套(怎么做?)(假设这个集合是{“a”,“b”,“c”,“d”}),那么返回将是一个带有一列的表“table” “列”和行上的两个结果“c”和“d”。
这可以通过sql请求完成吗? 我想这可以用Oracle的Dual表来实现,但是因为我正在研究Postgres,所以我需要一些奇特的技巧。
感谢您的帮助。
答案 0 :(得分:1)
您可以使用generate_series()函数生成一种“虚拟表”。
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;
该查询未经过测试,但它应该让您入门。
重新评论:
如果你有一个任意的值列表,而不是一系列连续值,你可以把它变成一个公用表表达式(这个解决方案已经被另一个用户发布了,但他们随后删除了他们的回答)。
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;
是的,你必须编写应用程序代码来格式化输入值列表中的查询。