【发布时间】:2011-04-18 20:32:17
【问题描述】:
我在 Oracle 9i 数据库中有 3 个表。 A 与 B 连接,B 与 C 连接。A 和 C 没有什么可连接的。我正在尝试使用 A 和 C 中的值将行插入 B。我从这个开始:
INSERT INTO b
(value1,
value2,
value3,
value4)
(SELECT
a.value1,
a.value2,
c.value3,
c.value4
FROM a, c
WHERE a.column1 = x
AND c.column2 = y)
但由于表 a 和 c 之间没有连接,因此插入的行数比我预期的要多得多。有没有办法拆分两个 select 语句以从 a 表中获取一些值,从 c 标准中获取其他值?如果是这样,语法是什么?
【问题讨论】:
-
如果 a where col1 = x 只有一行,而 c where col2 = y 只有一行,这个输入应该只输入一行。如果 x 和 y 有多行,您将插入 x*y 行。您可以尝试 Select Distinct,但如果任何行的值 1-4 不同,仍然会有倍数。
-
你为什么要使用隐含的连接语法?非常非常糟糕的编码习惯。