Mysql创建表复合/连接其他两个表

时间:2014-10-30 15:56:59

标签: mysql

我确信这很简单..我只是没有看到正确的语法..

我有两张桌子:

select * from buyTable;
+---------+------+------------+
| Quarter | Year | buyerAgent |
+---------+------+------------+
|       4 | 2007 |          1 | 
|       1 | 2008 |          2 | 
|       2 | 2008 |          1 | 

mysql> select * from sellTable;
+---------+------+-------------+
| Quarter | Year | sellerAgent |
+---------+------+-------------+
|       2 | 2008 |           1 | 
|       3 | 2008 |           1 | 

这就是我想要的:

mysql> select ?????????????
+---------+------+-------------+-------------+
| Quarter | Year | sellerAgent | buyerAgent |
+---------+------+-------------+-------------+
|       4 | 2007 |           0 |          1 | 
|       1 | 2008 |           0 |          2 | 
|       2 | 2008 |           1 |          1 |
|       3 | 2008 |           1 |          0 |

零可以为空。不关心。看起来这应该不会太难,但我还没有设法强迫mysql做我想做的事。

更新

使用两个建议..其中为左连接提供了选择,并建议使用完全外连接..我想出了以下内容。在我的例子中,buyTable和sellTable是mysql临时表。在mysql中使用临时表有一个条件,你不能为同一个查询重新打开一个表。因此,我必须为买入和卖出制作第二张具有相同内容的临时表。我称他们为buyTable2和sellTable2。如果您使用的是实际的mysql表,则不需要这样做,并且可以适当地修改以下查询。

此外,此查询添加了第三列,用于汇总买入和卖出列。此外,它替换了NULL条目,其中没有任何购买(或出售)给定季度的零。

(select buyTable.Quarter, buyTable.Year, ifnull(sellerAgent,0), ifnull(buyerAgent,0), 
        ifnull(sellerAgent,0)+ifnull(buyerAgent,0) 
  FROM buyTable 
  LEFT JOIN  sellTable ON 
    (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year)) 
union 
(select sellTable2.Quarter, sellTable2.Year, ifnull(sellerAgent,0), ifnull(buyerAgent,0),
        ifnull(sellerAgent,0)+ifnull(buyerAgent,0) 
  FROM buyTable2 
  RIGHT JOIN  sellTable2 ON 
    (buyTable2.quarter = sellTable2.quarter AND buyTable2.year = sellTable2.year));

2 个答案:

答案 0 :(得分:2)

我认为这应该可以解决问题,

select buytable.quarter, buytable.year, sellerAgent, buyerAgent FROM buyTable LEFT JOIN  sellTable ON (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year)
UNION
select sellTable.quarter, sellTable.year, sellerAgent, buyerAgent FROM buyTable RIGHT JOIN  sellTable ON (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year)

如果您不想要重复输入,请使用UNION,如果您想要重复输入,请使用UNION ALL。

答案 1 :(得分:0)

select quarter, year, sellerAgent, buyerAgent 
from buyTable full outer join sellTable 
using(year,quarter);