MYsql与exists语句联合

时间:2017-10-06 04:15:55

标签: php mysql vb.net

所以我有一个相当复杂的sql语句,根据需求将十个表合并到一个表中。

结果样本(仅包含此问题所必需的基本内容)

Unique | date | amount | Table
12345  | 10/2 | 200    |   1
12345  | 10/2 |  20    |   2
23456  | 10/3 | 100    |   3

我的问题是,由于前两行的唯一性是相同的,但是从不同的表中,如何将它们合并在一起以便它成为这个?

Unique | date | amount | Table
12345  | 10/2 | 220    |   1 (Don't really care about the table number)
23456  | 10/3 | 100    |   3

这是我的陈述的样本

(SELECT unique, dates, amt, tbl FROM ..... WHERE ....) 
UNION 
(SELECT unique, dates, amt, tbl FROM ..... WHERE ....) ORDER BY dates ASC

如果可以通过MYsql完成会很棒,如果没有,PHP / VB.net中的答案也会被接受。所有帮助赞赏。感谢

1 个答案:

答案 0 :(得分:0)

您可以使用group_concat来抓取所有表名,从而使用组包装查询。例如

DROP TABLE IF EXISTS T1,T2,T3;

CREATE TABLE T1(UNIQUEID  INT, DT DATE, AMT INT);
CREATE TABLE T2(UNIQUEID  INT, DT DATE, AMT INT);
CREATE TABLE T3(UNIQUEID  INT, DT DATE, AMT INT);

INSERT INTO T1 VALUES(1,'2017-01-01',10),(1,'2017-02-01',10),(2,'2017-01-01',20);
INSERT INTO T2 VALUES(1,'2017-01-01',10),(3,'2017-01-01',10),(4,'2017-01-01',20);
INSERT INTO T3 VALUES(2,'2017-01-01',10),(5,'2017-01-01',10),(4,'2017-01-01',20);

SELECT  UNIQUEID,DT,SUM(AMT) SUMAMT,SUBSTR(GROUP_CONCAT(TNAME),1,2)
FROM
(
SELECT 'T1' TNAME, UNIQUEID, DT,AMT FROM T1
UNION ALL
SELECT 'T2' TNAME, UNIQUEID, DT,AMT FROM T2
UNION ALL
SELECT 'T3' TNAME, UNIQUEID, DT,AMT FROM T3
) S
GROUP BY UNIQUEID,DT;

结果

+----------+------------+--------+---------------------------------+
| UNIQUEID | DT         | SUMAMT | SUBSTR(GROUP_CONCAT(TNAME),1,2) |
+----------+------------+--------+---------------------------------+
|        1 | 2017-01-01 |     20 | T1                              |
|        1 | 2017-02-01 |     10 | T1                              |
|        2 | 2017-01-01 |     30 | T1                              |
|        3 | 2017-01-01 |     10 | T2                              |
|        4 | 2017-01-01 |     40 | T3                              |
|        5 | 2017-01-01 |     10 | T3                              |
+----------+------------+--------+---------------------------------+
6 rows in set (0.00 sec)

如果您愿意,可以订购Group_concat,如果省略子串,则可以打印所有表名。 没有all子句使用union语句是不值得的,因为mysql会尝试重复数据删除而你真的不想这样做。