这是我的情况:
我有两个表a和b,想把a和b的结果合并起来。也许用词解释起来很复杂,但用表格结果来说明更容易理解。
表a的代码
CREATE TABLE `A` (
`id_doc_a` int(11) NOT NULL AUTO_INCREMENT,
`subject_a` varchar(100) DEFAULT NULL,
`doc_nr_a` varchar(100) NOT NULL,
`doc_type_a` varchar(50) NOT NULL,
`doc_date_a` date NOT NULL,
`value_IN` varchar(50) NOT NULL,
PRIMARY KEY (`id_doc_a`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
表b的代码
CREATE TABLE `B` (
`id_doc_b` int(11) NOT NULL AUTO_INCREMENT,
`subject_b` varchar(100) DEFAULT NULL,
`doc_nr_b` varchar(100) NOT NULL,
`doc_type_b` varchar(50) NOT NULL,
`doc_date_b` date NOT NULL,
`value_OUT` varchar(50) NOT NULL,
PRIMARY KEY (`id_doc_b`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
我想选择所有具有值(例如john)的subjects\u a和subjects\u b,并将它们合并到一个具有列的表中:
| SUBJECT | DOC_NR | DOC_TYPE | DOC_DATE | TBL_A_VALUE_IN | TBL_B_VALUE_OUT |
|---------|--------|----------|-------------|----------------|-----------------|
| JOHN | 1 | PDF | 20018-03-16 | 50.00 | NULL OR 0.00 |
| JOHN | 33 | PDF | 20018-08-09 | 25.00 | NULL OR 0.00 |
| JOHN | 13 | PDF | 20018-07-29 | 32.50 | NULL OR 0.00 |
| JOHN | 4 | PDF | 20018-06-06 | 41.30 | NULL OR 0.00 |
| JOHN | 12 | JPEG | 20018-04-22 | NULL OR 0.00 | 78.20 |
| JOHN | 31 | JPEG | 20018-03-21 | NULL OR 0.00 | 6.50 |
| JOHN | 33 | JPEG | 20018-05-01 | NULL OR 0.00 | 26.99 |
其中,前4行是表a的结果,后3行是表b的结果,其中条件是subject(subject\u a=subject\u b)=john。
希望解释得好,谢谢你的帮助。
解决方案:感谢@scaisedge
SELECT
t.SUBJECT_NAME,
t.DOCUMENT_NR,
t.DOCUMENT_TYPE,
t.DOCUMENT_DATE,
t.TBL_A_VALUE_IN,
t.TBL_B_VALUE_OUT
FROM (
SELECT
SUBJECT_a AS SUBJECT_NAME,
DOC_NR_a AS DOCUMENT_NR,
DOC_TYPE_a AS DOCUMENT_TYPE,
DOC_DATE_a AS DOCUMENT_DATE,
VALUE_IN AS TBL_A_VALUE_IN,
NULL AS TBL_B_VALUE_OUT
FROM a
UNION ALL
SELECT
SUBJECT_b AS SUBJECT_NAME,
DOC_NR_b AS DOCUMENT_NR,
DOC_TYPE_b AS DOCUMENT_TYPE,
DOC_DATE_b AS DOCUMENT_DATE,
NULL AS TBL_A_VALUE_IN,
VALUE_OUT AS TBL_B_VALUE_OUT
FROM b
) T
WHERE t.SUBJECT_NAME = 'john'
ORDER BY t.DOCUMENT_DATE
我删除了0和1,并使用了别名,这样它更可读。对于order可以使用第一个select上的一列,如果要添加更多条件,只需使用,或者如果不需要null,我们可以使用0.00,而不是null作为两个select。
再次感谢斯凯西奇的帮助和耐心。
2条答案
按热度按时间2guxujil1#
你完全可以用工会
k3bvogb12#
你只需要加入表格。
将两个数据集合并到一个结果表中。当然,如果不需要重复的值(即id\u doc\u a和id\u doc\u b),可以指定所需的值,而不是通配符*