由於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