我确信这很简单..我只是没有看到正确的语法..
我有两张桌子:
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));
答案 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);