2016-12-01 19 views
3

ほとんどの人が満足している。このサブクエリERRORん:はなぜMySQLのサポート 'LIMIT&IN/ALL/ANY/SOMEサブクエリ'

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery 

、すべての答えは、私たちはこのような状況でleft outer joinでサブクエリを交換することをお勧めします。

inオペレータでは多くのサブクエリが使用されていますが、なぜMySQL開発グループがそれをMySQLに持ってこないかを決定する理由は、これらを制限する何らかの理由がありますサブクエリのオペレータは危険なパフォーマンスですか?

2016年11月30日、Mysql 8.0の最新のベータドラフトのドキュメントとして、MySQLは依然としてこの種のサブクエリをサポートしていません。今(主に世界最大規模の企業のための高い要求の厳しい環境下で)約14年前からSQL(ほとんどのOracle ND SQL Serverなど)で働いた

http://dev.mysql.com/doc/refman/8.0/en/subquery-errors.html

+0

彼らはジョイントで書き直すことができますし、彼らがあなたのリストをお試しに低いです。 – Drew

+0

@Drew私は、 'LIMIT'の' IN'節にある相関サブクエリは、パフォーマンスの観点からは本当に醜いかもしれないと考えていました。結合を使用するほうがより良い方法でしょう。なぜなら、これは、MySQLの人々がデータベースの習慣を悪化させないようにするためです。 –

+0

私は決してそのようにコーディングしません。それは私の最初の考えでした。罰。 – Drew

答えて

1

。あなたの作業方法を見直すことを強くお勧めします。このようにサブクエリの結果を制限する必要はありませんでした。ここで

は、あなたが送ったことをそのリンクに記載されている各シナリオに私のコメントです:

  1. サブクエリでの「制限」を使用:これはSELECT内のサブクエリで結果
  2. 複数の列を嘘になるだろうステートメント - 私はこれが役に立つと思ういくつかのケースを理解していますが、SQLステートメントを読むのは紛らわしいかもしれません。なぜなら、サポートされていないと思う理由です。これを可能にするdbエンジンは認識していません。それを正しく行う。
  3. サブクエリは複数の行を返します。たとえば、値がEQUALの場合は、リストではなく別の値と同じでなければなりません。リストから値を取得する場合は、別の構文が必要です。
  4. サブクエリの技術的な制限と同じテーブルを更新すると、一部のエンジンが行ではなくテーブルをロックします。私はこれを多くやったと確信しています。 ORACLE DBを愛する必要があります:-)

    サブクエリの結果を制限するために考えられる唯一のシナリオは、ログのエラー数をカウントする場合(例:[PROGRAM] [LOG COUNT] [ERR COUNT] [ERR EXAMPLE])...この非常にまれなケースでは、サブクエリの結果を制限する使い方を理解していますこのためには、MIN()やMAX()などの任意のグループを使用することができます。

    とにかく、サブクエリの結果を制限する必要があると思うシナリオが見つかった場合、データのサンプルを取り込むだけではなく、再度考えてみてください。もしそうなら、ここで尋ねてください:

関連する問題