我剛剛在查詢中發現了這個不規則的問題,爲什麼在使用內連接和左連接時結果不同?一個,結果是在臨時命中表和最終查詢中排序?排序的結果與mysql中的內連接和左連接有所不同
我做了一個小例子來說明這個問題:
# cleanup
drop temporary table if exists ids;
drop temporary table if exists arts;
# create temporary tables
create temporary table arts (id int, title varchar(100), posted datetime);
create temporary table ids (id int, artid int);
# insert dummy articles
insert into arts (id, title, posted) VALUES (1, 'a', '2010-04-01');
insert into arts (id, title, posted) VALUES (2, 'b', '2010-07-01');
insert into arts (id, title, posted) VALUES (3, 'c', '2010-06-01');
insert into arts (id, title, posted) VALUES (4, 'd', '2010-08-01');
# insert ordered list of hits
insert into ids (id, artid) values (1, 4);
insert into ids (id, artid) values (2, 2);
insert into ids (id, artid) values (3, 3);
insert into ids (id, artid) values (4, 1);
# execute queries
select i.artid, a.posted from ids i left join arts a on a.id = i.artid;
select i.artid, a.posted from ids i inner join arts a on a.id = i.artid;
# cleanup
drop temporary table if exists arts;
drop temporary table if exists ids;
第一查詢返回:
4,2,3,1 (as expected, ordered by posted-column descending)
第二個返回:
1,2,3,4 (ordered by pk?)
第二個查詢在哪裏? – kevingessner 2010-07-19 12:32:30
它現在應該在那裏,之前是編輯錯誤 – possan 2010-07-19 12:34:19
您應該每次獲得4行,因爲您的@row變量在每行之後遞增,而不是之前。我做了上面的SQL,得到了兩個相同的結果(每行4行,不是3)。你使用的是什麼版本的MySQL? – 2010-07-19 12:39:38