1

2つのテーブルがあるとしましょう。

english2つの列を持つ テーブル、idおよびletter

1,a
2,b
3,c

greek2つの列を持つ テーブル、idおよび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セットのを期待どおりの動作に追加する必要があるのはなぜですか?

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

そして、それがランダムなものでない限り、LIMIT句にORDERBYを置く必要があります

于 2012-05-19T00:20:01.753 に答える