Je veux obtenir le nombre d'enregistrements saisis par un utilisateur dans la table différente. Le schéma de DB est:enregistrements Sélectionnez le tableau que les chiffres de différents sur la base de rejoindre
+-----------------------+
| Survey Master |
+----------------+------+
| Field | Key |
+----------------+------+
| id | PK |
| Username | |
| FamilyMasterId | FK |
+----------------+------+
+------------+------+
| Family Master |
+------------+------+
| Field | Key |
+------------+------+
| id | PK |
+------------+------+
+-----------------------+
| Family Detail |
+----------------+------+
| Field | Key |
+----------------+------+
| id | PK |
| FamilyMasterId | FK |
+----------------+------+
+-----------------------+
| Travel Master |
+----------------+------+
| Field | Key |
+----------------+------+
| id | PK |
| FamilyDetailId | FK |
+----------------+------+
+-----------------------+
| Travel Detail |
+----------------+------+
| Field | Key |
+----------------+------+
| id | PK |
| TravelMasterId | FK |
+----------------+------+
Je veux voir le nombre de documents créés par chaque utilisateur dans chaque table quelque chose comme ceci:
Username SurveyMaster FamilyMaster FamilyDetail TravelMaster TravelDetail
---------- -------------- -------------- -------------- -------------- --------------
User001 59 47 36 26 12
User002 88 76 64 42 25
User003 49 44 35 25 15
User004 77 69 55 45 37
Après avoir examiné les liens suivants:
- Find Records from Different Tables
- Select count(*) from multiple tables
- http://www.sqlines.com/mysql/how-to/join-different-tables-based-on-condition
- http://www.informit.com/articles/article.aspx?p=30875&seqNum=5
- SQL: Combine Select count(*) from multiple tables
j'ai pu écrire cette requête mais il donne les mêmes enregistrements dans toutes les colonnes:
SELECT USERNAME, COUNT(USERNAME) SURVEYMASTER, COUNT(USERNAME) FAMILYMASTER, COUNT(USERNAME) FAMILYDETAIL, COUNT(USERNAME) TRAVELMASTER, COUNT(USERNAME) TRAVELDETAIL FROM
((SELECT CREATEUSER USERNAME FROM SURVEYMASTER
)
UNION ALL
(SELECT SM.CREATEUSER USERNAME FROM SURVEYMASTER SM
INNER JOIN FAMILYMASTER FM ON FM.ID = SM.FAMILYMASTERID
)
UNION ALL
(SELECT SM.CREATEUSER USERNAME FROM SURVEYMASTER SM
INNER JOIN FAMILYMASTER FM ON FM.ID = SM.FAMILYMASTERID
INNER JOIN FAMILYDETAIL FD ON FM.ID = FD.FAMILYMASTERID
)
UNION ALL
(SELECT SM.CREATEUSER USERNAME FROM SURVEYMASTER SM
INNER JOIN FAMILYMASTER FM ON FM.ID = SM.FAMILYMASTERID
INNER JOIN FAMILYDETAIL FD ON FM.ID = FD.FAMILYMASTERID
INNER JOIN TRAVELMASTER TM ON FD.ID = TM.FAMILYDETAILID
)
UNION ALL
(SELECT SM.CREATEUSER USERNAME FROM SURVEYMASTER SM
INNER JOIN FAMILYMASTER FM ON FM.ID = SM.FAMILYMASTERID
INNER JOIN FAMILYDETAIL FD ON FM.ID = FD.FAMILYMASTERID
INNER JOIN TRAVELMASTER TM ON FD.ID = TM.FAMILYDETAILID
INNER JOIN TRAVELDETAIL TD ON TM.ID = TD.TRAVELMASTERID
)
) T
GROUP BY USERNAME
ORDER BY USERNAME
EDIT
Voici la relation description:
- FamilyMasterId est la clé étrangère dans Surveymaster et FamilyDetail tables.
- FamilyDetailId est la clé étrangère dans le tableau de TravelMaster. TravelMasterId est la clé étrangère dans la table TravelDetail.
Si les performances ne sont pas un problème, vous pouvez obtenir chaque compte en utilisant un sous-requête distincte. BTW, la relation entre les tables ne sont pas claires. – FLICKER
'pour obtenir le nombre d'enregistrements entrés par un utilisateur dans la table différente' ** Vous avez besoin d'USERID ** dans chaque table, par ex. created_by_userid –
@Used_By_Already est pas là quelque façon que nous pouvons obtenir le nombre que nous les jointures entre toutes les tables –