从两个表中选择所有列

时间:2016-08-18 19:01:17

标签: postgresql select

假设我有以下内容:

表-A

| id |    date    | order_id | sku | price |
--------------------------------------------
| 10 | 2016-08-18 |    111   | ABC |   10  |

表-B

| id |    date    | order_id | description | type | notes | valid |
-------------------------------------------------------------------
| 50 | 2016-08-18 |    111   |     test    |  AA  |       | true  |

我想从两个表中获取所有列,因此生成的表如下所示:

| id |    date    | order_id | sku | price | description | type | notes | valid |
---------------------------------------------------------------------------------
| 10 | 2016-08-18 |    111   | ABC |   10  |             |      |       |       |
---------------------------------------------------------------------------------
| 50 | 2016-08-18 |    111   |     |       |     test    |  AA  |       | true  |

我尝试过工会:

(
 SELECT *
 from table_a
 where table_a.date > Date('today')
)
UNION 
(
 SELECT *
 from table_b
 where table_b.date > Date('today')
)

但我得到了:

ERROR: each UNION query must have the same number of columns

如何解决这个问题?还有另一种方法吗?

2 个答案:

答案 0 :(得分:1)

轻松:)

(
 SELECT id, date, order_id, sku, price, NULL AS description, NULL AS type, NULL AS notes, NULL AS valid
 from table_a
 where table_a.date > Date('today')
)
UNION 
(
 SELECT id, date, order_id, NULL AS sku, NULL AS price, description, type, notes, valid
 from table_b
 where table_b.date > Date('today')
)

答案 1 :(得分:0)

或者,您可以加入UNION而不是UNION:

SELECT  *
FROM    table_a A
JOIN    table_b B USING ( id )
WHERE   A.date > TIMESTAMP 'TODAY'
  AND   B.date > TIMESTAMP 'TODAY';

查看更多选项:https://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-JOIN