【发布时间】:2016-03-22 16:35:57
【问题描述】:
我有两张表,一张有值(FACT 表),我试图将一列合并到一个键/值表(FACT_ATTRIBUTE 表)中。键是数字,值是 varchar2。 FACT_ATTRIBUTE 表中已经有一些条目。我正在尝试编写一个合并新条目的包过程。我们正在尝试取消触发器和序列。我有一些 SQL 可以选择表中尚未包含的条目,但我正在为如何创建索引键值而苦苦挣扎。键应该比当前最大值大一。
例如,假设 FACT_ATTRIBUTE 表已经有到键 5 的条目。新条目“值 6”进来。键/值的插入将是 (6, “值 6”) 到 FACT_ATTRIBUTE。
这是我所在的地方:
INSERT INTO FACT_ATTRIBUTE (
KEY, VALUE
)
VALUES(
(SELECT (MAX(KEY) + 1) FROM FACT_ATTRIBUTE),
(SELECT DISTINCT ENTRY
FROM FACT fact_table
WHERE NOT EXISTS (
SELECT 1 FROM FACT_ATTRIBUTE fa
WHERE fa.VALUE = fact_table.ENTRY
))
);
问题很明显,内部select抓取多个元素,而insert是单值。一个限制是它不能在 null 上崩溃(如果没有新值)。有没有什么好方法可以做到这一点?我的 SQL 技能不是最敏锐的。提前感谢您的帮助!
【问题讨论】:
-
对于初学者,您的查询似乎颠倒了,似乎您在值中输入了一个数值,在键中输入了一个字符串,而在您的描述中,您以相反的方式描述了表格(数字表示键,字符串表示值)。这是故意的还是查询中有错误?
-
谢谢,把它们倒过来了,但查询仍然不起作用
-
该评论不是为了解决您的问题,而是为了了解您的数据结构(阅读您的问题时并不清楚)。我已经发布了一个解决方案作为您问题的答案,看看是否对您有帮助。祝你好运。
标签: oracle merge sql-insert