为每行选择除两行之外的两行值?

时间:2018-04-03 05:39:45

标签: sql postgresql subquery

我是sql的超级菜鸟,因此它可能无法清楚地解释我对标题的要求。对于那个很抱歉。

我将用一个简单的例子解释尽可能多的事情。

请先看看我的桌子

select * from table board;
-----------------------------
num | category1 | category2 |
-----------------------------
1   | c         | tutorial
2   | c         | note
3   | c++       | tutorial
4   | c++       | code
-----------------------------

我想像这样选择每个类别的值列表

select distinct category1 from board;
category1 
-----------
c
c++


select distinct category2 from board;
category2 
-------------
code
note
tutorial

我能做到这一点很容易,但我觉得它很蹩脚。 此查询需要运行两次才能选择每个类别。

我期待像

这样的结果
category1 | category2 
---------------------
c         | NULL 
c++       | NULL 
NULL      | code 
NULL      | note
NULL      | tutorial

我尝试的代码在下面

Select category1 as cat1, category2 as cat2 
FROM board
LEFT JOIN (SELECT distinct category1 FROM blog)tb1
ON cat1 = tb1.category
LEFT JOIN (SELECT distinct category2 FROM blog)tb2
ON cat2 = tb2.category;

但是它的回报

category1 | category2 
---------------------
c         | tutorial
c         | note
c++       | tutorial
c++       | code

我现在非常困难。

有没有办法只运行一次查询?比如使用SubQuery?

1 个答案:

答案 0 :(得分:1)

您可以使用UNION

select category1, NULL AS category2 from board
UNION 
select NULL, category2 from board;

<强> https://httpd.apache.org/docs/current/misc/security_tips.html