我在Oracle 9i db中有3个表。 A加入B,B加入C. A& C没有任何东西可以加入。我试图用A和A的值插入B行。 C.我从这开始:
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)
但由于表格和表格之间没有联接。 c,我插入的行数比我预期的多得多。有没有办法将两个select语句拆分为从a表中获取某些值以及从c条件中获取其他值?如果是这样,语法是什么?
答案 0 :(得分:1)
由于A和C之间没有关系,因此连接基本上是笛卡尔连接。
您添加的任何条件都将特定于您的要求。如果您可以从表中发布一些数据,那么理解您的案例会很有帮助。
假设你有两个表学生(有10行)和Classes(3行),你现在想要在第三个表(student_class_enrol)中插入行。除非您有某些特定条件,否则基本插入将是...
insert into student_class_enrol (student_id, class_id)
select s.student_id, c.class_id
from students s, classes c;
将插入30行,为所有3个班级注册每个学生。
为了避免这种笛卡尔“情况”,您可以像在问题中一样直接在查询后添加条件......
insert into student_class_enrol (student_id, class_id)
select s.student_id, c.class_id
from students s, classes c
where (s.student_id not in (1,2,3) and c.class_id <> 4) ;
或单独添加条件,然后进行连接..
insert into student_class_enrol (student_id, class_id)
select s.student_id, c.class_id
from (select student_id from students where student_id not in (1,2,3)) s
(select class_id from class where class_id <> 4) c;