我一直在我的班級和谷歌搜索的印象中,內連接和自然連接之間的唯一區別是自然連接只回傳您正在加入的列的一個副本,而內連接回傳兩者。因此,我驚訝地發現在以下(簡化的)示例中,自然連接回傳 2 行(對我來說似乎是正確的),而內部連接回傳 4(似乎是錯誤的)。
簡化示例:
/* Delete the tables if they already exist */
drop table if exists Movie;
drop table if exists Reviewer;
drop table if exists Rating;
/* Create the schema for our tables */
create table Movie(shared1 int, unshared2 text);
create table Rating(shared1 int, unshared3 int);
insert into Movie values(1, 'a');
insert into Movie values(2, 'b');
insert into Rating values(1,3);
insert into Rating values(1,3);
然后sql結果...
sqlite> select * from Movie natural join Rating;
1|a|3
1|a|3
/*seems correct*/
sqlite> select * from Movie inner join Rating;
1|a|1|3
1|a|1|3
2|b|1|3
2|b|1|3
/*seems strange and/or wrong*/
sqlite> select * from Movie inner join Rating on Movie.shared1 = Rating.shared1;
1|a|1|3
1|a|1|3
/*seems right*/
uj5u.com熱心網友回復:
在這個查詢中:
select * from Movie inner join Rating
你INNER JOIN不帶ON子句使用。
這相當于CROSS JOIN:
select * from Movie cross join Rating
通常 anINNER JOIN應該有一個ON子句,但在 SQLite 中可以省略它。
從輸入資料的確定(FROM 子句處理):
如果連接運算子是 "CROSS JOIN"、"INNER JOIN"、"JOIN" 或逗號 (",") 并且沒有 ON 或 USING 子句,則連接的結果只是左邊的笛卡爾積和右手資料集。
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/381373.html
