如何组合来自4个mysql表的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何组合来自4个mysql表的数据相关的知识,希望对你有一定的参考价值。
我有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
此外,我不确定这个网站是如何工作的,所以如果我做一些愚蠢的事情给我一点时间,我会解决它。
答案
这是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 ALL
或UNION
时,union中的每个结果集必须具有相同的列数。我写了... 0 AS payment, '' AS paymentcode ...
将伪列放在联合结果集中,其中表中没有这些列。
以上是关于如何组合来自4个mysql表的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用来自 msaccess 表的过滤数据填充 vb.net 中的组合框