在MySQL中,如何“加入”三张表
我在“如何加入两个以上的表”中看到了大量的线程,但是这些线程似乎都没有解决我的问题。 我有三个表: 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进行很多更改,我不会真的不想这样做,但如果这是最简单和最好的选择,我会做。
谢谢!
SELECT
teams.name,
SUM(payfiles.deals_passed) AS team_deals_passed
FROM payfiles
LEFT JOIN persons USING (hash)
LEFT JOIN teams USING (team_id)
GROUP BY teams.team_id
您可以使用SUM()来获取总数,并使用GROUP BY来获得团队的每个总数。
这就像一个魅力!万分感谢! 但我仍然觉得有点困惑...... – 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