我正在寻找一种简单的方法来查看我的 IN-LIST 中的哪些项目实际上不在表中。这看起来很简单,但我想我可能想多了。
我有一长串由客户提供的商品代码,他们希望表中的一个属性为每个商品代码更新。但是,我需要让客户知道他提供的任何代码是否实际上不存在于表中。我试过做一个 COUNT(*) 和一个 GROUP BY 并且我尝试了一些使用 MINUS 的变体,但它总是归结为这样一个事实,即如果该值不在 IN-LIST 中,我就无法引用它.
示例:项目表有 3 个条目
Item_code
12345
98765
65436
用户用品清单
12345
98765
65436
81764
我想向客户强调代码“81764”不是有效的商品代码。我可以使用 PL/SQL 轻松地做到这一点,但如果可能的话,我想要一个 SQL 解决方案。
您需要创建一个值列表,不幸的是,这在 Oracle 中非常麻烦(由于缺少
values()
子句)。但以下将起作用:
但是考虑到查询的性质,参数化有点复杂。最好的解决方案可能是创建一个(全局)临时表,然后将您收到的 ID 列表放入该表并使用它而不是通用表表达式(
with (...)
部分)编辑
有一种(繁琐的)方法可以“分解”逗号分隔的值列表,在这种情况下这可能“更容易”:
但这可能很快就会达到 Oracle 对字符串文字 4000 字节的限制....