1

假设我有两张桌子:

有两列的表englishid并且letter

1,a
2,b
3,c

有两列的表greekid并且letter

1,alpha
2,beta
3,gamma

好的,所以我执行查询select * from english limit 1,5 并得到:

2,b
3,c

这是我所期望的。现在我尝试select english.id,english.letter,greek.letter from english join greek on greek.id=english.id order by english.id asc limit 1,5

2,b,beta
3,c,gama
1,a,alpha
2,b,beta
3,c,gama

什么!? 为什么这个集合是圆形的?好的,下一个查询按我的预期工作:

select english.id,english.letter,greek.letter from english join greek on greek.id=english.id group by english.id order by english.id asc limit 1,5

2,b,beta
3,c,gama

那么这里到底发生了什么?为什么我需要group by english.id像我期望的那样添加 for set 的行为?

4

2 回答 2

5

可能您的greek表中有重复的行。

当我在 MySQL 5.5.20 上尝试它时它工作正常:sqlfiddle

这是一个示例,其中我故意在greek表中插入了重复的行,它给出的结果与您得到的结果完全相同:sqlfiddle

于 2012-05-19T00:15:48.903 回答
1

LIMIT 适用于整个查询。如果要限制特定表,请先对其应用限制

select english.id,english.letter,greek.letter 
from (select * from english limit 1,5) as english
join greek on greek.id=english.id

你应该把 ORDER BY 放在 LIMIT 子句上,除非它是随机的

于 2012-05-19T00:20:01.753 回答