我刚刚在查询中发现了这个不规则的问题,为什么在使用内连接和左连接时结果不同?一个,结果是在临时命中表和最终查询中排序?排序的结果与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