sql >> Databáze >  >> RDS >> Mysql

Jak provést úplné vnější spojení pro kombinaci dvou tabulek v mysql?

Chcete-li provést FULL OUTER JOIN můžete udělat LEFT OUTER JOIN a UNION s RIGHT OUTER JOIN (za předpokladu, že MySql stále nepodporuje FULL OUTER JOIN ):

select * from A as a
    left outer join B as b on a.col = b.col
union
select * from A as a
    right outer join B as b on a.col = b.col

Všimněte si, že můžete použít poddotazy pro A a B - který by měl fungovat s vašimi dotazy. Ve vašem případě:

select * from (SELECT * FROM t1) as a
    left outer join (SELECT * FROM t2) as b on a._tid = b._tid
union
select * from (SELECT * FROM t1) as a
    right outer join (SELECT * FROM t2) as b on a._tid = b._tid

S výsledkem rovným (za předpokladu, že jsem se nepomýlil při kopírování a vkládání vašich dat):

+------+-------+------------+----------+------+-------+------------+----------+
| _id  | _tid  | _dt        | _advance | _id  | _tid  | _dt        | _advartn |
+------+-------+------------+----------+------+-------+------------+----------+
|   17 | hjg   | 2012-04-18 |     2151 | NULL | NULL  | NULL       |     NULL |
|   22 | RKT01 | 2012-04-10 |     2098 | NULL | NULL  | NULL       |     NULL |
|   14 | RKT04 | 2012-04-18 |     1511 |    8 | RKT04 | 2012-04-20 |      150 |
|   16 | RKT09 | 2012-04-09 |      250 | NULL | NULL  | NULL       |     NULL |
|   15 | RKT10 | 2012-04-17 |     1313 | NULL | NULL  | NULL       |     NULL |
|    8 | RKT21 | 2012-04-03 |     1321 | NULL | NULL  | NULL       |     NULL |
|   19 | RKT31 | 2012-04-26 |     2512 | NULL | NULL  | NULL       |     NULL |
|   20 | RKT33 | 2012-04-10 |     2250 | NULL | NULL  | NULL       |     NULL |
|   25 | T01   | 2012-04-11 |     2500 | NULL | NULL  | NULL       |     NULL |
| NULL | NULL  | NULL       |     NULL |    9 | RKT02 | 2012-04-10 |     2500 |
+------+-------+------------+----------+------+-------+------------+----------+


  1. Široké pole varchar způsobuje chybu Požadovaná konverze není podporována pomocí openquery s propojeným serverem MySQL

  2. if (vyberte počet (sloupec) z tabulky)> 0 potom

  3. Může OCI_CONNECT způsobit ORA-01438:hodnotu větší, než je specifikovaná přesnost povolená pro tento sloupec?

  4. Problém perských postav v databázi mysql