由于A和C之间没有关系,所以连接基本上是笛卡尔连接。
您添加的任何条件都将根据您的要求而定。如果您可以从表格中发布一些数据,这将有助于理解您的案例。假设你有2个学生(10行)和类(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;
如果在col1 = x中只有一行,并且c中只有一行col2 = y,则该输入只能输入一行。如果x和y有多行,则会插入x * y行。您可以尝试Select Distinct,但如果值1-4对于任何行都不相同,则仍然会有倍数。 – user662852 2011-04-18 20:40:55
为什么你使用这种隐含的连接语法?非常非常差的编码习惯。 – HLGEM 2011-04-18 21:53:10