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

Subquery MySQL - Temukan hanya record pertama di LEFT JOIN

Ini adalah greatest-n-per-group masalah, yang sering ditanyakan di Stack Overflow.

Inilah cara saya menyelesaikannya dalam skenario Anda:

SELECT m.memberid, m.membername, m.gender, mp.phone, mh.loggedtime, mh.ipaddy
FROM tbl_members m 
INNER JOIN tbl_members_phones mp ON m.defaultphoneid = mp.phoneid
INNER JOIN tbl_members_addresses ma ON m.defaultaddressid = ma.addressid
LEFT OUTER JOIN tbl_members_login_history mh ON m.memberid = mh.memberid
LEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid = mh2.memberid
    AND mh.pk < mh2.pk
WHERE mh2.pk IS NULL;

Artinya, kami ingin mh menjadi baris terbaru di tbl_member_login_history untuk yang diberikan. Jadi kami mencari baris lain mh2 yang bahkan lebih baru. Jika tidak ada yang lebih baru dari mh baris ditemukan, lalu mh2.* akan menjadi NULL, jadi mh harus yang terbaru.

Saya berasumsi tabel ini memiliki kolom kunci utama yang berisi nilai yang meningkat. Untuk contoh ini, saya asumsikan nama kolomnya adalah pk .

Menggunakan LEFT OUTER JOIN untuk keduanya referensi ke tabel riwayat login berarti bahwa m baris akan dilaporkan meskipun tidak ada baris yang cocok.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Contoh cara menggunakan bind_result vs get_result

  2. Penyimpanan File untuk Aplikasi Web:Sistem file vs mesin DB vs NoSQL

  3. grup hitung mysql dengan memiliki

  4. Kecualikan nilai tertentu saat membagi nilai tetap ke negara berdasarkan bagi hasil harian

  5. Bagaimana cara menggunakan tipe int/long yang tidak ditandatangani dengan Entity Framework?