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

SQL:USERテーブルのユーザーレコードの多くのテーブルからカウントを取得する最良のアプローチは何ですか?

    使用:

       SELECT u.userid,
              u.username,
              COALESCE(f.numFiles, 0) AS numFiles,
              COALESCE(p.numPhotos, 0) AS numFiles,
              COALESCE(g.numGroups, 0) AS numGroups
         FROM [USER] u
    LEFT JOIN (SELECT t.userid,
                      COUNT(*) AS numFiles
                 FROM [FILES] t
             GROUP BY t.userid)f ON f.userid = u.userid
    LEFT JOIN (SELECT t.userid,
                      COUNT(*) AS numPhotos
                 FROM [PHOTOS] t
             GROUP BY t.userid) p ON p.userid = u.userid
    LEFT JOIN (SELECT t.userid,
                      COUNT(*) AS numGroups
                 FROM [GROUPS] t
             GROUP BY t.userid) g ON g.userid = u.userid
        WHERE u.userid = 2
    

    これを1つのクエリに含めるには、OUTER結合を使用する必要があります。すべてのテーブルの内部結合では、ユーザーがFILES、PHOTOS、およびGROUPSテーブルに少なくとも1つのレコードを結果セットに含める必要があります。 OUTER結合とは、少なくとも1つのテーブル(FILES、PHOTOS、またはGROUPS)にレコードがあるユーザーが返されることを意味します。

    しかし、JOINは結果セットを膨らませるリスクもあります。これは、私の回答の以前のバージョンで発生した問題です。 FILES、GROUPS、およびPHOTOSカウントに派生テーブル/インラインビューを使用するようにクエリを変更することで、問題が解決され、派生テーブル/インラインビューの外部にGROUPBYが必要なくなります。




    1. PHPで複数の画像の挿入とアップロードを実行するにはどうすればよいですか?

    2. Mysql接続がローカルホストで拒否されました

    3. PHPフォームを使用して複数のテーブルからデータを取得するにはどうすればよいですか?

    4. 各ステートメントのトリガーの例