2013-04-30 137 views
-3

我有两个表,如下所示: -SQL查询来连接两个表

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 

人们正在指挥我对左外连接,全外连接我试过下面这做了两个查询nt解决我的目的。

​​
+0

什么是您的预期输出 – 2013-04-30 11:02:12

+3

您是否尝试过任何操作?这是一个简单的外连接。 – 2013-04-30 11:02:49

+0

[mysql left outer join]可能重复(http://stackoverflow.com/questions/3058834/mysql-left-outer-join) – APC 2013-04-30 11:09:35

回答

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` 

(作为反对在约迪的答案,每个从每个表读取两次链接的例子)

+0

我也想这样做。但错误地做错了。 +1 – hims056 2013-04-30 11:26:23

+0

@Mark Ba​​nnister谢谢。 – 2013-04-30 11:33:36

+0

@VirendraBisht:不客气。 – 2013-04-30 11:34:24

1

这是你想要

Full Outer Join in MySQL

不会只给出了答案,你我在那里找到和学到一些东西。

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

+0

这些表之间没有唯一的ID,这就是为什么我没有从左外连接或全外连接获得解决方案。谢谢 – 2013-04-30 11:32:56

+0

我试过以下两个查询,它们给了我想要的输出结果,请你帮我弄清楚我想要的结果。 “select * from table1 left join table2 on table1.date = table2.date union select * from table1 right join table2 on table1.date = table2.date;”另一个是“select * from table1 left join table2 on table1.date = table2.date;”谢谢 – 2013-04-30 12:01:32

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 ;