我有两个表payroll_advance和payroll_advrtn,我应该做完整的外部联接以获得我的要求结果。但是,我确信完整的外部联接在mysql中是不可能的,而且我知道完全外部连接是可能的通过使用union.But我不知道我怎么能加入在下面的查询。如何在mysql中完成两个表的全外连接?
我的payroll_advance表产生以下结果。
SELECT _id,_tid,_dt,sum(_amount) as _advance FROM payroll_advance WHERE YEAR(_dt)=YEAR(CURDATE()) AND MONTH(_dt) = MONTH(CURDATE()) group by _tid;
+-----+-------+------------+---------+
| _id | _tid | _dt | _advance|
+-----+-------+------------+---------+
| 17 | hjg | 2012-04-18 | 2151 |
| 22 | RKT01 | 2012-04-10 | 2098 |
| 14 | RKT04 | 2012-04-18 | 1511 |
| 16 | RKT09 | 2012-04-09 | 250 |
| 15 | RKT10 | 2012-04-17 | 1313 |
| 8 | RKT21 | 2012-04-03 | 1321 |
| 19 | RKT31 | 2012-04-26 | 2512 |
| 20 | RKT33 | 2012-04-10 | 2250 |
| 25 | T01 | 2012-04-11 | 2500 |
+-----+-------+------------+---------+
并且payroll_advrtn给出以下结果。
SELECT _id,_tid,_dt,sum(_amount) as _advrtn FROM payroll_advrtn WHERE YEAR(_dt) = YEAR(CURDATE()) AND MONTH(_dt) = MONTH(CURDATE()) group by _tid;
+-----+-------+------------+---------+
| _id | _tid | _dt | _advrtn |
+-----+-------+------------+---------+
| 9 | RKT02 | 2012-04-10 | 2500 |
| 8 | RKT04 | 2012-04-20 | 150 |
+-----+-------+------------+---------+
但我想通过结合上述两个结果像下面的结果。
+------+-------+-------+------------+----------+---------+
| _id | _tid | _tid | _dt | _advance | _advrtn |
+------+-------+-------+------------+----------+---------+
| 17 | hjg | NULL | 2012-04-18 | 2151 | NULL |
| 22 | RKT01 | NULL | 2012-04-10 | 999 | NULL |
| 14 | RKT04 | RKT04 | 2012-04-18 | 11 | 150 |
| 16 | RKT09 | NULL | 2012-04-09 | 250 | NULL |
| 15 | RKT10 | NULL | 2012-04-17 | 1313 | NULL |
| 8 | RKT21 | NULL | 2012-04-03 | 1321 | NULL |
| 19 | RKT31 | NULL | 2012-04-26 | 2512 | NULL |
| 20 | RKT33 | NULL | 2012-04-10 | 2250 | NULL |
| 25 | T01 | NULL | 2012-04-11 | 2500 | NULL |
| NULL | NULL | RKT02 | NULL | NULL | 2500 |
+------+-------+-------+------------+----------+---------+
任何帮助将不胜感激。谢谢!
你的结果母鹿这看起来不像是一个完全联结。 – 2012-04-13 08:29:41
@ypercube:是的,它看起来没什么特别之处,但我认为欧普可能在产生取消结果时犯了一些错误。我提供了一个给出“完整外部联接”结果的答案。 – Anonymous 2012-04-13 08:33:02