Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Query Beberapa Tabel

Oke jadi sementara saya setuju sebagian bahwa Anda harus melakukan beberapa mengaduk-aduk dan mempelajari lebih lanjut tentang gabungan kiri, ada juga beberapa kesulitan untuk menjawab pertanyaan ini dengan benar yang mungkin hilang pada pemula. Saya akan melanjutkan dan membantu Anda menjawabnya, tetapi saya sarankan untuk mempelajari lebih lanjut tentang bergabung.

Permintaan saya yang tepat akan bergantung pada indeks yang tersedia, tetapi kemungkinan besar akan menyerupai sesuatu seperti ini:

SELECT a.* 
FROM products AS a
LEFT JOIN (
SELECT product_id FROM order_products as b 
INNER JOIN orders AS c
ON b.order_id = c.order_id
WHERE c.date_ordered >= date_sub(c.date_ordered, INTERVAL 7 day)
GROUP BY product_id 
) AS d
ON a.product_id = d.product_id 
WHERE d.product_id IS NULL

Apa yang saya lakukan adalah saya sedang menulis subquery yang menggabungkan pesanan dan memesan produk bersama-sama, di mana date_ordered berada dalam rentang tanggal tertentu (saya akan merekomendasikan belajar tentang fungsi date_sub di sini:http://www.w3schools.com/sql/func_date_sub.asp dan juga lakukan beberapa SELECT cepat date_sub(date_ordered, INTERVAL X DAY) DARI kueri pesanan untuk memastikan Anda memahami cara kerja penghitungan ini, dalam praktiknya.

Sekarang, saya mendapatkan daftar pesanan saya untuk X hari terakhir (7 dalam kueri di atas) dan saya menggabungkannya dengan tabel produk pesanan untuk mendapatkan produk yang dipesan. Di sini, saya ingin mengurangi produk saya, pada dasarnya. Product_id =300 mungkin telah dipesan 70 kali. Product_id =200 mungkin telah dipesan 50 kali. Apa pun masalahnya, saya tidak ingin menggabungkan 70 catatan dan 50 catatan ke tabel produk saya untuk id produk 300 dan 200, jadi saya menghapusnya. Pernyataan GROUP BY terakhir melakukan itu. Secara fungsional sama dengan menulis DISTINCT (walaupun mungkin ada perbedaan kecil dalam cara penghitungannya dalam keadaan tertentu, tidak satu pun dari keadaan tersebut yang berlaku di sini... gunakan DISTINCT jika itu lebih jelas untuk Anda)

Setelah saya memiliki daftar id produk unik yang dipesan dalam X hari terakhir, saya menggabungkannya dengan tabel produk saya. Di sini, saya menggunakan join kiri. Seperti komentar yang disebutkan di atas, Anda akan ingin melihat gagasan bergabung dengan cukup hati-hati. Lakukan itu, jika Anda belum melakukannya.

Terakhir, saya menerapkan filter WHERE yang mengatakan "WHERE d.product_id IS NULL." Apa yang dilakukan adalah mengatakan, "oke, jika product_id =Y dipesan dalam X hari terakhir, maka itu akan berhasil bergabung ke tabel produk saya dengan a.product_id =d.product_id. Jika tidak dipesan, maka a. product_id akan ada di kumpulan hasil saya, tetapi d.product_id tidak. Artinya, d.product_id akan menjadi nol."

Sentuhan terakhir itu mungkin bagian yang tidak terlihat / menonjol.

Semoga ini membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi SSL PHP ke MySQL

  2. SQL - pilih baris yang memiliki nilai yang sama dalam dua kolom

  3. Menggunakan variabel dalam Klausa WHERE

  4. Bagaimana cara mengawasi server replikasi MySQL saya?

  5. Bagaimana Fungsi FROM_BASE64() Bekerja di MySQL