Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL:Pobieranie liczby z wielu tabel dla rekordu użytkownika w tabeli USER.Jakie jest najlepsze podejście?

Użyj:

   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

Musisz użyć złączeń OUTER, aby było to w jednym zapytaniu; Sprzężenia INNER dla wszystkich tabel wymagałyby, aby użytkownik miał co najmniej jeden rekord w tabeli PLIKI, ZDJĘCIA i GRUPY, aby znalazł się w zestawie wyników. Złączenie OUTER oznacza, że ​​zostaną zwróceni użytkownicy z rekordami w co najmniej jednej z tabel (PLIKI, ZDJĘCIA lub GRUPY).

Ale JOIN ryzykuje również zawyżenie zestawu wyników, co było problemem, który pojawił się w poprzedniej wersji mojej odpowiedzi. Zmieniając zapytanie tak, aby używało tabel pochodnych/widoków wbudowanych dla liczby PLIKI, GRUPY i ZDJĘCIA, problem został rozwiązany i nie ma potrzeby GRUPOWANIA WEDŁUG poza tabelami pochodnymi/widokami wbudowanymi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co oznacza Poważny błąd w bieżącym poleceniu. Ewentualne wyniki należy odrzucić. Błąd SQL Azure oznacza?

  2. Dynamiczny SQL (przekazywanie nazwy tabeli jako parametru)

  3. Jak mogę połączyć się z SQL Server 2008 R2 za pomocą django-mssql?

  4. Pętla T-SQL przez kolumnę danych XML w celu uzyskania unikalnego zestawu ścieżek

  5. Jak włączyć usługę MSDTC w programie SQL Server?