Rumah > Soal Jawab > teks badan
P粉4810352322023-08-29 16:08:14
Pertama sekali, izinkan saya membetulkan anda; itu bukan pertanyaan Navicat, itu adalah pertanyaan MySQL. Sekarang, ini adalah dua perkara yang berbeza. MySQL ialah pangkalan data, Navicat ialah alat - serupa dengan alatan lain seperti MySQL Workbench, PHPMyAdmin atau SQLyog. Ia direka untuk membolehkan anda melaksanakan fungsi pangkalan data melalui antara muka grafik.
Seterusnya, saya akan memberikan dua pertanyaan, anda boleh menggunakan salah satu daripadanya bergantung pada versi MySQL anda. Pertanyaan pertama adalah seperti berikut:
SELECT p1.idproduct, p1.exp_date, p1.selling_price FROM product_exp_date p1 JOIN ( SELECT idproduct, MIN(exp_date) AS minexp FROM product_exp_date GROUP BY idproduct ) AS p2 ON p1.idproduct=p2.idproduct AND p1.exp_date=p2.minexp ORDER BY p1.idproduct;
Anda sepatutnya boleh menjalankan pertanyaan di atas dalam mana-mana versi MySQL atau MariaDB. Idea pertanyaan ini adalah melalui idproduct
分组获取最小的exp_date
,然后将其作为子查询,再次与product
表进行连接,以匹配这两个提取的值,以便我们可以提取selling_price
.
Pertanyaan kedua:
SELECT idproduct, exp_date, selling_price FROM ( SELECT idproduct, exp_date, selling_price, ROW_NUMBER() OVER (PARTITION BY idproduct ORDER BY exp_date) rn FROM product_exp_date ) AS p1 WHERE rn=1;
Pertanyaan ini hanya boleh dijalankan pada MySQL v8+ atau MariaDB 10.2+ (dan ke atas) yang menyokong fungsi tetingkap. Idea ini sedikit berbeza berbanding dengan pertanyaan sebelumnya, di sini kita akan menumpukan pada penjanaan ROW_NUMBER()
,然后将其作为子查询,并只添加一个WHERE
子句。与之前的查询相比,这不需要JOIN
tindakan berdasarkan syarat tertentu.
Anda dapat melihat bahawa saya tidak mengambil kira jadual product
kerana saya tidak melihatnya digunakan dalam pertanyaan asal anda, tetapi jika anda perlu menggabungkannya bersama-sama dan anda tidak dapat memikirkan cara melakukannya, hanya berikan saya akan tinggalkan mesej dan saya akan lihat apa yang boleh saya lakukan.