MySQLデータベースでNavicatを使用して複数のID値をフィルタリングする
P粉285587590
2023-08-28 17:09:38
<p>id_product を繰り返さずに、最新の有効期限と販売価格を使用してデータをフィルタリングする必要があります。この問題を解決しようとしましたが、正しい方法が見つかりません</p>
<p>これは Navicat クエリと結果です</p>
<pre class="brush:php;toolbar:false;">SELECT
product_exp_date.idproduct、
product_exp_date.exp_date、
product_exp_date.sale_price
から
製品
内部結合
product_exp_date
の上
product.idproduct = product_exp_date.idproduct
グループ化
product_exp_date.exp_date</pre>
<pre class="brush:php;toolbar:false;">idproduct exp_date Selling_price
8 2022-11-01 300
5 2022-06-08 370
5 2022-06-09 350
7 2022-07-01 380
5 2022-09-20 450
6 2022-10-08 140
6 2023-06-08 150
<p>私はこの方法を試しました</p>
<pre class="brush:php;toolbar:false;">GROUP BY
product_exp_date.idproduct</pre>
<p>しかし、異なる結果が得られます</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date Selling_price
5 2022-06-09 350
6 2023-06-08 150
7 2022-07-01 380
8 2022-11-01 300
<p>しかし、この結果を取得する必要があります</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date Selling_price
5 2022-06-08 370
6 2022-10-08 140
7 2022-07-01 380
8 2022-11-01 300
<p>商品一覧</p>
<pre class="brush:php;toolbar:false;">productid product_name
5A
6B
7C
8 D</pre>
<p>Product_EXP_DateTable</p>
<pre class="brush:php;toolbar:false;">idproduct_exp_date idproduct_exp_date Selling_price
1 5 2022-06-09 350
2 6 2023-06-08 150
3 5 2022-06-08 370
4 5 2022-09-20 450
5 6 2022-10-08 140
6 7 2022-07-01 380
7 8 2022-11-01 300
<p>クエリにエラーが発生することがあります。とにかく、この問題を解決するには助けが必要です。
ありがとう。 </p>
まず、訂正させていただきますが、これは Navicat クエリではなく、MySQL クエリです。さて、これらは 2 つの異なるものです。 MySQL はデータベースであり、Navicat はツールです。MySQL Workbench、PHPMyAdmin、SQLyog などの他のツールと同様です。グラフィカル インターフェイスを通じてデータベース機能を実行できるように設計されています。
次に、2 つのクエリを示します。MySQL のバージョンに応じて、そのうちの 1 つを使用できます。最初のクエリは次のとおりです:
リーリー上記のクエリは、MySQL または MariaDB のどのバージョンでも実行できるはずです。このクエリの考え方は、
idproduct
グループ化によって最小のexp_date
を取得し、それをサブクエリとして使用してproduct
テーブルに再度接続することです。これら 2 つの抽出された値を照合して、Selling_price
を抽出できるようにします。2 番目のクエリ:
リーリーこのクエリは、ウィンドウ関数をサポートする MySQL v8 または MariaDB 10.2 (以降) でのみ実行できます。考え方は前のクエリと少し異なります。ここでは、特定の条件に基づいて
ROW_NUMBER()
を生成することに焦点を当て、それをサブクエリにしてWHERE
句を追加するだけです。前のクエリと比較して、これにはJOIN
操作が必要ありません。元のクエリで使用されていないため、
product
テーブルを考慮していないことがわかりますが、結合する必要があるのに結合できない場合は、方法を知りたいならメッセージを送ってください。何ができるか見てみましょう。デモフィドル