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

Pernyataan Pilih Bersarang di MYSQL bergabung

Saya melakukan jenis kueri ini secara berbeda, dengan pengecualian bergabung alih-alih subquery. Anda ingin menemukan baris B yang memiliki Waktu maksimum untuk ID yang diberikan; dengan kata lain, di mana tidak ada baris lain yang memiliki Waktu lebih besar dan ID yang sama.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

Anda juga dapat menggunakan tabel turunan , yang seharusnya berkinerja lebih baik daripada menggunakan subkueri yang berkorelasi.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

P.S.:Saya telah menambahkan greatest-n-per-group menandai. Jenis pertanyaan SQL ini muncul setiap minggu di Stack Overflow, jadi Anda dapat mengikuti tag tersebut untuk melihat lusinan pertanyaan serupa dan jawabannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DELETE FROM `table` AS `alias` ... WHERE `alias`.`column` ... mengapa sintaks error?

  2. Cakephp - mengandung (perilaku yang dapat ditampung) terlalu banyak

  3. PHP MySql (1045) Akses Ditolak Untuk Pengguna

  4. jumlahkan nilai dari Datagridview1(Table1) dan simpan ke Datagridview2(Table2) Menggunakan Linq dan MySql

  5. Permintaan pencarian pengguna SQL