sql查询:id多次列

时间:2018-02-01 13:55:45

标签: sql postgresql select multiple-columns

SQL newb在这里。 我在创建select语句时遇到了麻烦。

我有一个表REF,其中包含id和值v;

+-----+----+
| REF |    |
+-----+----+
| ID  |  V |
| 1   | 10 |
| 2   | 20 |
| 3   | 30 |
| 4   | 40 |
| 5   | 50 |
| 6   | 60 |
| 7   | 70 |
+-----+----+

在第二个表IND中,我有三列id值;

+-----+-----+-----+
|IND  |     |     |
|-----|-----|-----|
| ID1 | ID2 | ID3 |
| 1   | 2   |     |
|     | 3   | 4   |
| 5   |     |     |
| 6   |     | 7   |

我想在三列中的每一列中收到REF.v accordinlgly的值(表格RES); ids是截然不同的,两者之间没有重叠。

+-----+-----+-----+
| RES |     |     |
+-----+-----+-----+
| ID1 | ID2 | ID3 |
| 10  | 20  |     |
|     | 30  | 40  |
| 50  |     |     |
| 60  |     | 70  |
+-----+-----+-----+

2 个答案:

答案 0 :(得分:3)

您可以使用三个子查询查询IND表,以检索链接到已使用ID的值

试试这个:

SELECT
    (SELECT V FROM REF WHERE REF.ID = IND.ID1) AS V_ID1,
    (SELECT V FROM REF WHERE REF.ID = IND.ID2) AS V_ID2,
    (SELECT V FROM REF WHERE REF.ID = IND.ID3) AS V_ID3
FROM IND

<强>更新

关于两个建议的解决方案(LEFT OUTER JOINs Vs SUBQUERIES

我在Postgres 9.6引擎下尝试过Sql Fiddle。

时间相同,但关于LEFT OUTER JOIN的执行计划更复杂

您可以看到SqlFiddle SUBQUERIESSqlFiddle LEFT OUTER JOINs

答案 1 :(得分:1)

SELECT ref1.V AS RefV1, ref2.V AS RefV2, ref3.V AS RefV3
FROM IND i 
LEFT OUTER JOIN ref ref1
ON ref1.ID = i.ID1
LEFT OUTER JOIN ref ref2
ON ref2.ID = i.ID2
LEFT OUTER JOIN ref ref3
ON ref3.ID = i.ID3

使用左外连接连接引用表三次,这使得引用表与IND表不匹配,从而导致缺少ID的空值。然后从每个连接的表中选择v值,确保对其进行别名,这样就可以区分它们。