-3

我有两个表如下: -

 table1                                table2
 date      time  amount                date      time amount
 20120101  1000   101                  20120104  1000   10
 20120101  1100   100                  20120104  1100   11
 20120104  1000   101                  20120105  1000   11
 20120104  1100   105                  20120105  1100   8 

我想加入这两个表以获得如下输出:

 date      time  table1-amt   table2-amt
 20120101  1000   101          NULL
 20120101  1100   100          NULL
 20120104  1000   101           10
 20120104  1100   105           11
 20120105  1000   NULL          11
 20120105  1100   NULL          8

获取此输出的 sql 查询是什么?我正在使用mysql数据库。

我尝试了以下查询:

  select table1.date,table1.time,table1.close , table2.close 
  from table1,
        table2 
  where table1.date=table2.date 
  and table1.time=table2.time;

它给了我输出

    date       time  amount       amount
    20120104   1000   101           10
    20120104   1100   105           11

人们将我引向左外连接,完全外连接我尝试了以下两个查询,但这并没有解决我的目的。

   select * from table1 left join table2 on table1.date=table2.date ;

  select * from table1 left join table2 on table1.date=table2.date union select * from table1 right join table2 on table1.date=table2.date;
4

3 回答 3

2

一种只涉及从每个表中读取一次的方法:

SELECT `date`, `time`, sum(`amt1`) as `table1-amt`, sum(`amt2`) as `table2-amt` 
FROM
(SELECT `date`, `time`, amount as amt1, null as amt2
 FROM Table1
 UNION ALL
 SELECT  `date`, `time`, null as am1, amount as amt2
 FROM Table2) v
GROUP BY `date`, `time`

(与 Yordi 的答案中链接的示例相反,每个示例从每个表中读取两次。)

于 2013-04-30T11:19:07.550 回答
1

这就是你想要的

MySQL中的完全外连接

不只是给出答案,你会在那里找到我并学习一些。

编辑:哦,有人打败了我,然后把它交给了你^^。

于 2013-04-30T11:05:01.590 回答
0

你需要一个FULL(外部)JOIN。在 MySQL 中实现它的一种方法:

SELECT t1.date, t1.time, t1.close AS table1_amt, t2.close AS table2_amt 
FROM table1 AS t1
  LEFT JOIN table2 AS t2
    ON  t1.date = t2.date 
    AND t1.time = t2.time

UNION ALL

SELECT t2.date, t2.time, t1.close, t2.close 
FROM table1 AS t1
  RIGHT JOIN table2 AS t2
    ON  t1.date = t2.date 
    AND t1.time = t2.time
WHERE t1.date IS NULL ;
于 2013-04-30T12:07:49.470 回答