2016-05-18 4 views
2

私はMySQL 5.7にアップグレードしましたが残念なことに私はGROUP BYの機能の一部がなくなりました。 intmovies.idが重複していない限り、私はmoviesテーブルからすべての映画を選択したいと思っていました。 MySQLの5.6での私の以前のクエリされました:私は、同じIDを持つ2本の映画を持っていた場合、それが唯一の代わりに、その映画とその重複の、映画一本を表示していましたMySQL 5.7は、別の列に基づいてテーブルのすべての列を返します

SELECT * 
FROM movies 
WHERE movies.title LIKE '%example%' 
GROUP BY movies.id 

私がMySQL 5.7にアップグレードしたとき、GROUP BYは私にエラーをもたらし、代わりにORDER BYを使用するよう指示されました。ただし、このクエリ:

SELECT * 
FROM movies 
WHERE movies.title LIKE '%example%' 
ORDER BY movies.id 

重複する映画を返しますか。したがって、これをフィルタリングして重複しない場合にのみ行を返す方法はありますか?

編集:例えば、これは私のmovies表の場合:ここでは

movies 
================== 
| id | title | 
================== 
| 1 | example | 
------------------ 
| 2 | example | 
------------------ 
| 1 | example | 
------------------ 

は、各クエリの出力です:

Previous query result (with MySQL 5.6) 
======= 
1 | example 
2 | example 

New query result (with MySQL 5.7 and ORDER BY) 
======= 
1 | example 
1 | example 
2 | example 

私は、最終的な結果は何の重複(その結果を含まないようにしたいです最初のクエリ結果のようになります)。

編集2:私は、MySQLが処理した方法を悪用していると理解しています。GROUP BY残念ながら、私はMySQLの経験があまりなく、StackOverflowからその答えを得ました。私はちょうど複写idを含んでいない私のテーブルのすべての列を返すようにしたいと思います。

+0

を使用するのは簡単だろうと考えていますか? PRIMARY KEYがない場合は、RDBMSに関する限り、テーブルはありません。 – Strawberry

+0

@Strawberryこれは学校での課題です。私たちは意図的に割り当てに悪いデータを与えられました。 :|残念ながら、重複しない行を返すのは私たちの責任です。すべてが5.7までうまくいきました。しかし、私はそれが提供する新しい機能のいくつかが必要なので、私はダウングレードできません。 – Alex

+1

GROUP BYは集約関数を処理するためのものです。 SELECT DISTINCTは集約が必要ない場合に使用するためのものです。 – Strawberry

答えて

0

私はあなたが重複した映画を持っていないのはなぜdistinctキーワード

SELECT distinct movies.* 
FROM movies 
WHERE movies.title = 'example' 
関連する問題