sql >> データベース >  >> RDS >> Mysql

MySQLサブクエリ-LEFTJOINの最初のレコードのみを検索します

    これはgreatest-n-per-group スタックオーバーフローで頻繁に尋ねられる問題。

    これがあなたのシナリオでそれを解決する方法です:

      SELECT m.memberid、m.membername、m.gender、mp.phone、mh.loggedtime、mh.ipaddyFROM tbl_members m INNER JOIN tbl_members_phones mp ON m.defaultphoneid =mp.phoneidINNER JOIN tbl_members_addresses maONm。 defaultaddressid =ma.addressidLEFT OUTER JOIN tbl_members_login_history mh ON m.memberid =mh.memberidLEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid =mh2.memberid AND mh.pk  

    つまり、 mhが必要です 指定されたメンバーIDのtbl_member_login_historyの最新の行になります。したがって、別の行 mh2を検索します それはさらに最近です。 mhより最近のものがない場合 行が見つかったら、mh2。* NULLになるため、 mh 最新のものである必要があります。

    このテーブルには、増加する値を含む主キー列があると想定しています。この例では、列名は pkであると想定しています。 。

    両方にLEFTOUTERJOINを使用する ログイン履歴テーブルへの参照は、 mを意味します 一致する行がない場合でも、行が報告されます。



    1. Oracleでユーザーを作成して権限を割り当てる方法

    2. シリアル化された配列内のmysqlselectクエリ

    3. SQL Server 2017(データベースエンジン)の新機能

    4. MySQLで名前utf8を設定しますか?