我在「如何加入兩個以上的表」中看到了大量的線程,但是這些線程似乎都沒有解決我的問題。 我有三個表: teams
,persons
和payfiles
在MySQL中,如何「加入」三張表
teams
表看起來是這樣的:
DROP TABLE IF EXISTS `teams`;
CREATE TABLE IF NOT EXISTS `teams` (
`team_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`leader` varchar(32) NOT NULL,
PRIMARY KEY (`team_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=30;`
persons
表:
DROP TABLE IF EXISTS `persons`;
CREATE TABLE IF NOT EXISTS `persons` (
`team_id` int(2) DEFAULT '0',
`hash` varchar(32) NOT NULL,
UNIQUE KEY `hash` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
payfiles
表:
DROP TABLE IF EXISTS `payfiles`;
CREATE TABLE IF NOT EXISTS `payfiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`hash` varchar(32) NOT NULL,
`deals_passed` int(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1298 ;
表格有更多列,但爲了簡單起見,我修剪了它們。
teams
表包含以下列方式記錄: 1
,Team 1
,afaf7878af78a
後者是球隊的領袖獨特的哈希值。
表的人包含了所有的個人信息,以及獨特的哈希值, 例如 李四其散列afaf7878af78a
誰也隊1
表payfile
也有一個「哈希」的領導者列,該表包含計算員工支票所需的全部信息。
管理團隊希望瞭解公司的總體規劃。他們希望看到每一個團隊是多少錢帶來英寸
我面對這裏的問題,是「團隊」
試圖組的收入我最好的嘗試到目前爲止,這是
SELECT hash, SUM(deals_passed) as deals FROM payfiles JOIN persons ON persons.hash = payfiles.hash GROUP BY payfiles.hash
但我看不到一個優化的方式來查詢數據庫,以便按團隊的一般願景生成一個團隊而不改變數據庫的結構。
例如: John Doe和Jane Doe屬於「Team 1」,他們分別帶來了500美元和600美元。
我想產生類似:
「帶來了隊1 $ 1100」
我的另一種方法是更改數據庫的結構,並添加一個新列payfile表。這樣的列將是team_id
,所以我可以很容易地查詢它,但數據庫目前有大約10,000條記錄,這意味着更新不考慮team_id
列的10K記錄,並對GUI進行很多更改,我不會真的不想這樣做,但如果這是最簡單和最好的選擇,我會做。
謝謝!
這就像一個魅力!萬分感謝! 但我仍然覺得有點困惑...... – ILikeTacos 2012-07-18 16:10:29
最新的'LEFT JOIN'如何知道每個人屬於哪個團隊? – ILikeTacos 2012-07-18 16:10:51
'使用(散列)'將新表的「散列」列與前面的表的「散列」相連接,在這種情況下爲payfiles.hash,'USING(team_id)'將新表組連接到更早的表team_id,在這種情況下是persons.team_id,你有一個鏈:payfiles-(散列)-persons-(team_id) - 隊 – 2012-07-18 16:19:33