我是mysql的新手 我有两张桌子,
CREATE TABLE `tab1` (
`tid1` int(2) NOT NULL auto_increment,
`payer` varchar(100) default NULL,
`receiver` varchar(100) default NULL,
`payAmt` decimal(20,2) default '0.00',
`recAmt` decimal(20,2) default '0.00',
PRIMARY KEY (`tid1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
-
tab1
INSERT INTO `tab1` (`tid1`, `payer`, `receiver`, `payAmt`, `recAmt`) VALUES
(1, 'aaa', 'bbb', 100.00, -100.00),
(2, 'aaa', 'ccc', 200.00, -200.00),
(3, 'bbb', 'aaa', 150.00, -150.00),
(4, 'ccc', 'aaa', 175.00, -175.00);
-
tab2
CREATE TABLE `tab2` (
`tid2` int(2) NOT NULL auto_increment,
`payer` varchar(100) default NULL,
`receiver` varchar(100) default NULL,
`payAmt` decimal(20,2) default '0.00',
`recAmt` decimal(20,2) default '0.00',
PRIMARY KEY (`tid2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
-
tab2
INSERT INTO `tab2` (`tid2`, `payer`, `receiver`, `payAmt`, `recAmt`) VALUES
(1, 'ddd', 'aaa', 223.00, -223.00),
(2, 'aaa', 'bbb', 429.00, -429.00),
(3, 'ccc', 'aaa', 102.00, -102.00);
我想要的结果如下所示
name payAmtTotal recAmtTotal payAmtTotal-recAmtTotal
aaa 729 650 79
bbb 150 529 -379
ccc 277 -277 554
ddd 223 0 223
答案 0 :(得分:0)
不确定为什么有超过1个表的信息,首先出现的是尝试将其转换为1个表。
无论如何,不确定这是否是最好和最干净的方法如果表不是很大而你必须选择创建临时表,那么这是获得所需结果的一种方法。
CREATE TEMPORARY TABLE IF NOT EXISTS temp1 AS (SELECT * FROM `tab1`);
INSERT INTO temp1 SELECT * FROM `tab2`;
CREATE TEMPORARY TABLE IF NOT EXISTS temp2 AS (SELECT * FROM `temp1`);
CREATE TEMPORARY TABLE IF NOT EXISTS temp3 AS (SELECT * FROM `temp1`);
SELECT
`payer` AS `name`,
(SELECT SUM(payAmt) AS `p` FROM temp2 AS t WHERE t.payer = temp1.payer) AS `payAmtTotal` ,
(SELECT SUM(payAmt) AS `r` FROM temp3 AS t WHERE t.receiver = temp1.payer) AS `recAmtTotal`
FROM
temp1
GROUP BY `name`;
基本上,您创建一个单一(临时)表,并使用两个现有表中的数据填充此表。
由于MySQL不允许您在单个查询中使用相同的临时表,因此您需要创建更多:-)它们可以是第一个的副本。
之后,对自身的选择查询并不复杂。