为什么MySQL连接返回循环集?

roo*_*ook 1 mysql join

可以说我有两张桌子:

english有两列, id并且letter:

1,a
2,b
3,c
Run Code Online (Sandbox Code Playgroud)

greek有两列, id并且letter:

1,alpha
2,beta
3,gamma
Run Code Online (Sandbox Code Playgroud)

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

2,b
3,c
Run Code Online (Sandbox Code Playgroud)

这是我期望的.现在我试试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
Run Code Online (Sandbox Code Playgroud)

什么!? 为什么这个圆形?好的,下一个查询可以正常工作:

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
Run Code Online (Sandbox Code Playgroud)

那到底是怎么回事?为什么我需要group by english.id像我期望的那样将set 添加到行为?

Mar*_*ers 5

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

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

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