私はMySQL 5.7にアップグレードしましたが残念なことに私はGROUP BY
の機能の一部がなくなりました。 int
のmovies.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
を含んでいない私のテーブルのすべての列を返すようにしたいと思います。
を使用するのは簡単だろうと考えていますか? PRIMARY KEYがない場合は、RDBMSに関する限り、テーブルはありません。 – Strawberry
@Strawberryこれは学校での課題です。私たちは意図的に割り当てに悪いデータを与えられました。 :|残念ながら、重複しない行を返すのは私たちの責任です。すべてが5.7までうまくいきました。しかし、私はそれが提供する新しい機能のいくつかが必要なので、私はダウングレードできません。 – Alex
GROUP BYは集約関数を処理するためのものです。 SELECT DISTINCTは集約が必要ない場合に使用するためのものです。 – Strawberry