私は新しくSQLに加わり、いくつかのSQLクエリでできると思う問題があります。3つのテーブルに参加してMySQLのサマリーデータを取得する
私は3つのテーブルを持っています。それぞれ、プライマリ/外部キーを介して別のテーブルにリンクされています。
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS FileData (fd_ID_pk INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Analyst VARCHAR(2) NOT NULL);
INSERT INTO FileData (Analyst) VALUES('AD'), ('LS'), ('MM'), ('MM'), ('MM'), ('LS'), ('LS'), ('AD'), ('MM');
CREATE TABLE IF NOT EXISTS IndData (sp_ID_pk INT NOT NULL AUTO_INCREMENT PRIMARY KEY, fd_ID_fk INT NOT NULL, IndNum INT NOT NULL, FOREIGN KEY (fd_ID_fk) REFERENCES FileData (fd_ID_pk));
INSERT INTO IndData (fd_ID_fk, IndNum) VALUES (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (3,11), (3,12), (3,13), (3,14), (3,15), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (5,1), (5,2), (5,3), (5,4), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (9,1), (9,2), (9,3), (9,4), (9,5);
CREATE TABLE IF NOT EXISTS FinData (sp_1_fk INT NULL, sp_2_fk INT NULL, sp_3_fk INT NULL, FOREIGN KEY (sp_1_fk) REFERENCES IndData (sp_ID_pk), FOREIGN KEY (sp_2_fk) REFERENCES IndData (sp_ID_pk), FOREIGN KEY (sp_3_fk) REFERENCES IndData (sp_ID_pk));
INSERT INTO FinData (sp_1_fk, sp_2_fk, sp_3_fk) VALUES (57,null,64), (18,64,67), (null,11,35), (null,58,35), (null,null,24), (18,null,null), (null, 6,26), (34,null, 8), (null, 8,null), (59,68,28), (null, 1,17), (39,55,null), (65,58, 7), (null,null,10), (54, 6,null), (53,null,67), (27,19,41), (null,57, 5), (6,31,17),(4,64,25), (38,13,58), (55,null, 2), (66,null, 4), (10,10,null), (40,61,46), (null,null,52), (null,39,46), (null,11,32), (12,null,39), (56,44,21),(22,25,53), (37,null,null), (12,null,49), (43, null,13), (19,17,26), (46, 9,44), (null,13,null), (53,null, 6), (32,30,null)
は、基本的には、最初の表は、ファイルのリストであり、各ファイルには、関連するアナリストがあります: 現実がそこに約60,000のレコードが最も深いテーブルであるが、簡単のために、あなたはこれで私のテーブル構造を再作成することができますですそれと。アナリストごとに複数のファイルが存在する可能性があります。
fd_ID_pk Analyst
1 AD
2 LS
3 MM
4 MM
etc
第2のテーブルは、そのファイルからのデータエントリのリストであり、各レコードにはキーがあります。
sp_ID_pk fd_ID_fk IndNum
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6
7 2 1
8 2 2
etc
第3のテーブルは、私にとっては複雑になります。これは私が必要なもの
sp_1_fk sp_2_fk sp_3_fk
12 39
56 44 21
22 25 53
37
12 49
43 13
19 17 26
nullも可能な第2のテーブル内のレコードにリンクされたそれぞれの3つの列があり、各アナリストのためのファイルとIndDataとFinDataの数を示して要約表です。
私は私のアナリスト当たりの総カウントを与えるこれを得ているが、彼らは右全くいないようです:
:SELECT filedata.Analyst, COUNT(filedata.Analyst) as 'count'
FROM filedata
JOIN inddata
ON filedata.fd_ID_pk = inddata.fd_ID_fk
JOIN findata
ON findata.sp_1_fk = inddata.sp_ID_pk OR findata.sp_2_fk = inddata.sp_ID_pk OR findata.sp_3_fk = inddata.sp_ID_pk
GROUP BY filedata.Analyst
理想的には、しかし、私はこれを取得しようとしています
Analyst TotalFiles FilesUsed TotalInd IndUsed
AD 2 2 14 10
LS 3 3 24 16
MM 4 4 32 24
いくつかの質問があります...アドバイスありがとうございます!