MySqlでクエリを実行するときにonly_full_group_byに関連するエラー

467
Dan Bemowski 2015-12-06 21:42.

システムをアップグレードし、作業中のWebアプリケーション用にPHPを使用してMySql5.7.9をインストールしました。動的に作成されるクエリがあり、古いバージョンのMySqlで実行すると正常に機能します。5.7にアップグレードしてから、次のエラーが発生します。

SELECTリストの式#1はGROUP BY句になく、GROUPBY句の列に機能的に依存しない非集約列 'support_desk.mod_users_groups.group_id'が含まれています。これはsql_mode = only_full_group_byと互換性がありません

サーバーSQLモードのトピックに関するMysql5.7のマニュアルページに注意してください。

これは私に問題を引き起こしているクエリです:

SELECT mod_users_groups.group_id AS 'value', 
       group_name AS 'text' 
FROM mod_users_groups
LEFT JOIN mod_users_data ON mod_users_groups.group_id = mod_users_data.group_id 
WHERE  mod_users_groups.active = 1 
  AND mod_users_groups.department_id = 1 
  AND mod_users_groups.manage_work_orders = 1 
  AND group_name != 'root' 
  AND group_name != 'superuser' 
GROUP BY group_name 
HAVING COUNT(`user_id`) > 0 
ORDER BY group_name

この問題についてグーグルで調べましたがonly_full_group_by、クエリを修正するために何をする必要があるかを理解するのに十分な理解がありません。only_full_group_byオプションをオフにすることはできますか、それとも他に何かする必要がありますか?

さらに情報が必要な場合はお知らせください。

18 answers

372
davmos 2015-12-06 22:19.

私はちょうど追加しますgroup_idGROUP BY

SELECT一部ではない列を作成する場合GROUP BY、グループ内のその列に複数の値が存在する可能性がありますが、結果には単一の値用のスペースしかありません。したがって、データベースには通常、これらの複数の値を1つの値にする方法を正確に伝える必要があります。一般的に、これはのような集約関数で行われCOUNT()SUM()MAX()等...私が言う通常、他のほとんどの一般的なデータベース・システムは、この主張ので。ただし、バージョン5.7より前のMySQLでは、文句を言わず、任意の値を任意に選択するため、デフォルトの動作はより寛容でした。またANY_VALUE()、以前と同じ動作が本当に必要な場合に、この質問の別の解決策として使用できる機能もあります。この柔軟性は非決定論的であるためコストがかかります。したがって、それを必要とする非常に正当な理由がない限り、これはお勧めしません。MySQLは現在only_full_group_by、正当な理由でデフォルトで設定をオンにしているので、それに慣れて、クエリをそれに準拠させるのが最善です。

では、なぜ上記の私の簡単な答えですか?私はいくつかの仮定をしました:

1)group_idはユニークです。合理的なようですが、結局のところ「ID」です。

2)group_nameもユニークです。これは、そのような合理的な仮定ではないかもしれません。これが当てはまらず、重複がgroup_namesあり、私のアドバイスに従ってに追加group_idするGROUP BYと、同じ名前のグループの結果に別々の行が含まれるため、以前よりも多くの結果が得られる場合があります。私にとって、これは、データベースが値を任意に静かに選択しているため、これらの重複グループを非表示にするよりも優れています。

複数のテーブルが関係している場合は、すべての列をテーブル名またはエイリアスで修飾することもお勧めします...

SELECT 
  g.group_id AS 'value', 
  g.group_name AS 'text' 
FROM mod_users_groups g
LEFT JOIN mod_users_data d ON g.group_id = d.group_id 
WHERE g.active = 1 
  AND g.department_id = 1 
  AND g.manage_work_orders = 1 
  AND g.group_name != 'root' 
  AND g.group_name != 'superuser' 
GROUP BY 
  g.group_name, 
  g.group_id 
HAVING COUNT(d.user_id) > 0 
ORDER BY g.group_name
371
WeiYuan 2016-03-02 07:40.

only_full_group_by次の手順を実行して、設定を無効にすることができます。

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

MySQL 8は受け入れないNO_AUTO_CREATE_USERため、削除する必要があります。

336
azerafati 2016-07-25 01:27.

他の回答で説明されているように警告メッセージをオフにするか、何が起こっているのかを理解し修正することができます。

MySQL 5.7.5以降、デフォルトのSQLモードにはONLY_FULL_GROUP_BY含まれています。つまり、行をグループ化してからそのグループから何かを選択する場合、その選択を行う行明示的に指定する必要があります。

Mysqlは、探しているグループのどの行を知る必要があります。これにより、2つのオプションが提供されます。

  • 必要な列をグループステートメントに追加することもできます。group by rect.color, rect.valueこれは、場合によっては必要なものにすることができます。そうしないと、同じ色で重複した結果が返され、必要ない場合があります。
  • mysqlの集計関数を使用して、完全なリストのようにグループ内で探している行を示すこともできます。AVG() MIN() MAX()
  • そして最後にANY_VALUE()、グループ内のすべての結果が同じであることが確実な場合に使用できます。doc
174
Ajai 2016-07-04 22:23.

現在のクエリに変更を加えたくない場合は、以下の手順に従ってください-

  1. あなたの箱にvagrantssh
  2. タイプ: sudo vim /etc/mysql/my.cnf
  3. ファイルの一番下までスクロールしAて入力し、挿入モードに入ります
  4. コピーアンドペースト

    [mysqld]
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
  5. 入力しescた入力モードを終了するには

  6. 入力:wqしてvimを保存して閉じます。
  7. 入力sudo service mysql restartしてMySQLを再起動します。
85
Italo Borssatto 2016-11-14 11:11.

ANY_VALUE()集計されていない列を参照するために使用します。

SELECT name,           address , MAX(age) FROM t GROUP BY name; -- fails
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name; -- works

MySQL 5.7ドキュメントから:

ONLY_FULL_GROUP_BY を使用ANY_VALUE()して非集計列を参照することにより、無効にすることなく同じ効果を得ることができます。

..。

ONLY_FULL_GROUP_BY選択リストの非集計アドレス列がGROUP BY句で指定されていないため、このクエリは有効にすると無効になる可能性があります。

SELECT name, address, MAX(age) FROM t GROUP BY name;

..。

特定のデータセットについて、各名前の値が実際にアドレス値を一意に決定することがわかっている場合、アドレスは事実上機能的に名前に依存します。MySQLにクエリを受け入れるように指示するには、次のANY_VALUE()関数を使用できます。

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
56
Abraham Tugalov 2017-04-30 09:03.

このエラーが何であるかを説明しようと思います。
MySQL 5.7.5以降、オプションONLY_FULL_GROUP_BYはデフォルトで有効になっています。
したがって、標準のSQL92以前によると:

選択リスト、HAVING条件、またはORDER BYリストが、GROUP BY句で名前が付けられておらず、GROUP BY列に機能的に依存していない(一意に決定されていない)非集約列を参照しているクエリは許可されません。

ドキュメントで詳細を読む

したがって、たとえば:

SELECT * FROM `users` GROUP BY `name`;

上記のクエリを実行すると、エラーメッセージが表示されます。

#1055-SELECTリストの式#1はGROUP BY句になく、GROUPBY句の列に機能的に依存しない非集約列 'testsite.user.id'が含まれています。これはsql_mode = only_full_group_byと互換性がありません

どうして?
MySQLは正確に理解していないため、グループ化されたレコードから取得する特定の値は何か、これがポイントです。

IEは、usersテーブルに次のレコードがあると言うことができます。

そして、上記の無効なクエリを実行します。
また、上記のエラーが発生します。これは、という名前のレコードが3つJohnあり、それは素晴らしいことですが、すべてのレコードのemailフィールド値が異なるためです。
したがって、MySQLは、結果のグループ化されたレコードでどちらを返すかを単純に理解していません。

次のようにクエリを変更するだけで、この問題を修正できます。

SELECT `name` FROM `users` GROUP BY `name`

また、SELECTセクションにさらにフィールドを追加することもできますが、それらが集約されていない場合は追加できませんが、使用できる松葉杖があります(ただし、強くお勧めしません)。

SELECT ANY_VALUE(`id`), ANY_VALUE(`email`), `name` FROM `users` GROUP BY `name`

さて、なぜ使用ANY_VALUEが強く推奨されないのかと疑問に思うかもしれません。
MySQLは、取得するグループ化されたレコードの値を正確に認識していないため、この関数を使用して、それらのいずれかをフェッチするように要求します(この場合、名前= Johnの最初のレコードの電子メールがフェッチされました)。
正確に私はあなたがこの振る舞いを存在させたい理由についての考えを思い付くことができません。

私のことを理解していない場合は、MySQLでのグループ化の仕組みについて詳しく読んでください。非常に簡単です。

そして最後に、もう1つの単純でありながら有効なクエリがあります。
利用可能な年齢に応じて合計ユーザー数をクエリする場合は、このクエリを書き留めてください。

SELECT `age`, COUNT(`age`) FROM `users` GROUP BY `age`;

MySQLのルールによれば、これは完全に有効です。
等々。

問題が正確に何であるかを理解し、それから解決策を書き留めることが重要です。

42
Ryan 2016-09-01 04:09.

私はLaravelホームステッドでLaravel5.3、mysql 5.7.12を使用しています(0.5.0、私は信じています)

/etc/mysql/my.cnf反映するように編集を明示的に設定した後でも:

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

私はまだエラーを受け取っていました。

私はからに変更する必要config/database.phpがありtrueましたfalse

    'mysql' => [
        'strict' => false, //behave like 5.6
        //'strict' => true //behave like 5.7
    ], 

参考文献:

https://laracasts.com/discuss/channels/servers/set-set-sql-mode-on-homestead https://mattstauffer.co/blog/strict-mode-and-other-mysql-customizations-in-laravel -5-2

20
PiyaChakraborty 2017-03-22 04:15.

wamp 3.0.6または安定版2.5以外の上位バージョンを使用している場合、この問題が発生する可能性があります。まず、問題はsqlにあります。それに応じてフィールドに名前を付ける必要があります。しかし、それを解決する別の方法があります。wampの緑色のアイコンをクリックします。mysql-> mysql設定-> sql_mode-> none。またはコンソールからデフォルト値を変更できます。

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
20
Anil Gupta 2019-10-12 00:44.

mysqlまたはphpmyadminに移動し、データベースを選択してから、このクエリを実行するだけで機能します。それは私にとってはうまく機能しています。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
19
Jagdeep Singh 2017-06-21 00:34.

ファイルへの行の追加(以下に記載):/ etc / mysql / my.cnf

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

私のためにうまく働きます。サーバーバージョン:5.7.18-0ubuntu0.16.04.1-(Ubuntu)

10
Tanvir Hasan Anick 2016-11-18 06:43.

Mac用:

1.デフォルトのmy-default.cnfを/etc/my.cnfにコピーします

sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnf

2.お気に入りのエディターを使用してmy.cnfのsql_modeを変更し、これに設定します

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3.MySQLサーバーを再起動します。

mysql.server restart
7
Kai Noack 2016-08-14 19:35.

これが私が問題全体を理解するのに役立ったものです:

  1. https://stackoverflow.com/a/20074634/1066234
  2. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

そして、次の問題のあるクエリの別の例では。

問題がある:

SELECT COUNT(*) as attempts, SUM(elapsed) as elapsedtotal, userid, timestamp, questionid, answerid, SUM(correct) as correct, elapsed, ipaddress FROM `gameplay`
                        WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 1 DAY)
                        AND cookieid = #

これを最後に追加することで解決しました:

  GROUP BY timestamp, userid, cookieid, questionid, answerid, elapsed, ipaddress

注:PHPのエラーメッセージを参照してください。問題がどこにあるかがわかります。

例:

MySQLクエリエラー1140:GROUP BYを使用しない集約クエリで、SELECTリストの式#4に非集約列 'db.gameplay.timestamp'が含まれています。これはsql_mode = only_full_group_byと互換性がありません-クエリ:SELECT COUNT(*)を試行、SUM(elapsed)を経過合計、userid、timestamp、questionid、answerid、SUM(correct)を正しい、経過、ipaddressFROMゲームプレイWHEREタイムスタンプ> = DATE_SUB (NOW()、間隔1日)AND userid = 1

この場合、式#4がGROUPBYにありませんでした。

7
Braham Dev Yadav 2017-01-15 07:47.

localhost / wampserver 3の場合、sql-mode = user_modeを設定してこのエラーを削除できます。

click on wamp icon -> MySql -> MySql Setting -> sql-mode -> user_mode

次に、wampまたはapacheを再起動します

4
micaball 2017-09-11 06:07.

あなたは追加することができますunique indexしますgroup_id。あなたがそれgroup_idがユニークであると確信しているなら。

クエリを変更せずにケースを解決できます

遅い答えですが、答えにはまだ言及されていません。多分それは利用可能なすでに包括的な答えを完了する必要があります。少なくとも、フィールドが多すぎるテーブルを分割する必要がある場合は、問題は解決しました。

2
Gangai Johann 2017-08-10 02:30.

doctrine query Builderを使用してSymfonyでこのエラーが発生し、このエラーがorderByによって引き起こされた場合

select必要な列に注意して、代わりにgroupBy使用してください:addGroupBygroupBy

$query = $this->createQueryBuilder('smth')->addGroupBy('smth.mycolumn');

上の作品Symfony3 -

1
Harry Bosh 2017-03-02 17:03.

正確なSQLを使用しなかったことをお詫びします

このクエリを使用して、Mysqlの警告を克服しました。

SELECT count(*) AS cnt, `regions_id`
FROM regionables 
WHERE `regionable_id` = '115' OR `regionable_id` = '714'
GROUP BY `regions_id`
HAVING cnt > 1

私にとっての鍵に注意してください

count(*) AS cnt
0
Kiran Sone 2020-07-05 02:39.

Ubuntu18.04で以下のファイルを編集する必要がありました。

/etc/mysql/mysql.conf.d/mysqld.cnf

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

そして

sudo service mysql restart

0
RayCh 2020-08-12 04:42.

上記のコンセンサスの答えは良いですが、my.cnfファイルを修正した後、ストアドプロシージャ内でクエリを実行する際に問題が発生した場合は、SPを再度ロードしてみてください。

MySQLは元々デフォルトのonly_full_group_byを設定してSPをコンパイルしたに違いないと思います。したがって、my.cnfを変更してmysqldを再起動しても、SPに影響はなく、「SELECTリストはGROUP BY句になく、集約されていない列が含まれています...これはGROUPの列に機能的に依存していません」と失敗し続けました。 BY句。これはsql_mode = only_full_group_by "と互換性がありません。

SPをリロードすると、only_full_group_byが無効になっている状態でSPが再コンパイルされたはずです。その後、期待通りに動作しているようです。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

この太陽に優しいショルダーバッグで一日中外出してください

この太陽に優しいショルダーバッグで一日中外出してください

画像クレジット:Richard Mackney / Flickrトラベリングライトは必需品だけを運ぶことを意味するかもしれませんが、デバイスを補充する方法がない外出先では、接続を維持するのが難しくなる可能性があります。それはあなたがすべての生き物の快適さやクールなガジェットを捨てる必要があるという意味ではありません、ただあなたがいくつかのより小さなものを手に入れる必要があるということです、そしておそらくあなた自身をジュースに保つためにいくつかの、例えば非正統的な充電装置を使うでしょう。

ミッドセンチュリーリゾートのポストカードが廃墟に変わるのを見る

ミッドセンチュリーリゾートのポストカードが廃墟に変わるのを見る

ニューヨーク州スプリンググレンにある放棄されたホモワックロッジのボーリング場。キャッツキル南部のこの地域は、ニューヨーク市からのユダヤ人の行楽客に人気があることから、かつてはボルシチベルトとして知られていました。

ブルックリンスレートの美しいボードをあなたのテーブルに座らせましょう

ブルックリンスレートの美しいボードをあなたのテーブルに座らせましょう

ブルックリンスレートブルックリンスレートのマグカップとコースターの賞賛をすでに歌っており、それらの食器製品も同様に堅実です。ブルックリンスレートは、さまざまなサイズとテクスチャのスレートの完全な採石場を販売しています。一部のオプションは赤でも利用できます。上で見ることができるように、彼らは同様にカスタマイズをします。

遺伝子分析により、私たちの体内に生息する微生物の99%がカタログ化されていないことが明らかになりました

遺伝子分析により、私たちの体内に生息する微生物の99%がカタログ化されていないことが明らかになりました

画像:Juan Gaertner / Shutterstock私たちの体の内部は、私たちの細胞とは何の関係もない何十億もの微生物が住んでいる本物の生態系です。これがまだ少し気になることではなかったかのように、これらの微生物の99%が研究されたことがないことがわかりました。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language