【发布时间】:2014-10-30 15:56:59
【问题描述】:
我确定这很简单..我只是没有看到正确的语法..
我有两张桌子:
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));
【问题讨论】:
标签: mysql