如何组合来自4个mysql表的数据

问题描述 投票:0回答:1

我有4个包含数据的mysql表。每个表都有相同的列,名称和类型以及所有内容,只有数据更改。每个表都有不同的记录数,因为每个表代表不同的年份。所以2015,2016,2017和2018的表格。这些表格包含公司的数据以及他们欠政府服务的资金。因此,每个表都有大部分相同的数据,只有一些变化(一些公司支付)。我想创建一个第五个表,将这些表与额外的列组合在一起等.2015表有一个列所有的金额和一列银行支付代码,相同的另一个表,我希望在第五个表中有列对于任何支付代码金额的所有年份,其余的保持不变。我该怎么办?谢谢。

    CREATE TABLE `2015` (
  `id2015` int(11) NOT NULL AUTO_INCREMENT,
  `eponymia` varchar(200) DEFAULT NULL,
  `afm` varchar(45) DEFAULT NULL,
  `gemi` varchar(45) DEFAULT NULL,
  `nomiki_morfi` varchar(45) DEFAULT NULL,
  `status` varchar(45) DEFAULT NULL,
  `amount` varchar(45) DEFAULT NULL,
  `payment_code` varchar(45) DEFAULT NULL,
  `chamber_reg` varchar(45) DEFAULT NULL,
  `tmima` varchar(45) DEFAULT NULL,
  `dimos` varchar(45) DEFAULT NULL,
  `city` varchar(45) DEFAULT NULL,
  `street` varchar(45) DEFAULT NULL,
  `number` varchar(45) DEFAULT NULL,
  `tk` varchar(45) DEFAULT NULL,
  `phone` varchar(45) DEFAULT NULL,
  `mobile` varchar(45) DEFAULT NULL,
  `fax` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id2015`)
) ENGINE=MyISAM AUTO_INCREMENT=7735 DEFAULT CHARSET=utf8

这是其中一个表的模式,其他表是相同的,我要填写的表的模式是这个

CREATE TABLE `all_years` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `eponymia` varchar(240) DEFAULT NULL,
  `amount_2015` varchar(40) DEFAULT NULL,
  `amount_2016` varchar(40) DEFAULT NULL,
  `amount_2017` varchar(40) DEFAULT NULL,
  `amount_2018` varchar(40) DEFAULT NULL,
  `kodikos_2015` varchar(40) DEFAULT NULL,
  `kodikos_2016` varchar(40) DEFAULT NULL,
  `kodikos_2017` varchar(40) DEFAULT NULL,
  `kodikos_2018` varchar(40) DEFAULT NULL,
  `dimos` varchar(40) DEFAULT NULL,
  `city` varchar(40) DEFAULT NULL,
  `street` varchar(40) DEFAULT NULL,
  `number` varchar(40) DEFAULT NULL,
  `tk` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `all_years_id_uindex` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1686615 DEFAULT CHARSET=utf8

我希望列“amount_2015”和“kodikos_2015”包含来自2015表的数据,依此类推。这是数据的一个例子

81  "company name"  020587798   2036001000  ΑΤΟΜΙΚΗ Ενεργή  30.00   00200000196546264229    "VAT"   Εμπορικό    ΚΥΠΑΡΙΣΣΙΑΣ / ΜΕΣΣΗΝΙΑΣ ΚΥΠΑΡΙΣΣΙΑ  ΑΡΜΕΝΙΟΙ        24500   2761024466          
82  "company name"  129915690   14689845000 ΑΤΟΜΙΚΗ Ενεργή  30.00   00200000100549364229    "VAT"   Υπηρεσιών   ΛΕΥΚΤΡΟΥ / ΜΕΣΣΗΝΙΑΣ    ΠΥΡΓΟΣ ΛΕΥΚΤΡΟΥ         24024               
83  "company name"  302641263   14690945000 ΑΤΟΜΙΚΗ Ενεργή  30.00   00200000212785864222    "VAT"   Επαγγελματιών   ΦΙΛΙΑΤΡΩΝ / ΜΕΣΣΗΝΙΑΣ   ΦΙΛΙΑΤΡΑ    ΚΕΝΤΡΙΚΗ ΠΛΑΤΕΙΑ        24300               
84  "company name"  800171859   14691745000 ΕΕ  Λύση - Εκκαθάριση   80.00   00200000212787664228    "VAT"   Εμπορικό    ΑΥΛΩΝΑ / ΜΕΣΣΗΝΙΑΣ  ΚΥΠΑΡΙΣΣΙΑ  1 ΧΙΛ ΚΑΛΟΥ ΝΕΡΟΥ - ΤΣΑΚΩΝΑΣ    0   24500               
85  "company name"  110084982   14692445000 ΑΤΟΜΙΚΗ Ενεργή  30.00   00200000212789664228    "VAT"   Μεταποιητικό    ΦΙΛΙΑΤΡΩΝ / ΜΕΣΣΗΝΙΑΣ   ΦΙΛΙΑΤΡΑ            24300   

此外,我不确定这个网站是如何工作的,所以如果我做一些愚蠢的事情给我一点时间,我会解决它。

mysql excel database csv
1个回答
0
投票

这是UNION ALL的工作。

尝试这样的事情。

    SELECT 2015 AS year, company, owed, payment, paymentcode FROM tbl2015
    UNION ALL
    SELECT 2014 AS year, company, owed, 0 AS payment, '' AS paymentcode FROM tbl2014
    UNION ALL
    SELECT 2013 AS year, company, owed, 0 payment, '' paymentcode FROM tbl2013

当您使用UNION ALLUNION时,union中的每个结果集必须具有相同的列数。我写了... 0 AS payment, '' AS paymentcode ...将伪列放在联合结果集中,其中表中没有这些列。

© www.soinside.com 2019 - 2024. All rights reserved.