我在Oracle中有以下示例数据。
表名
ID Name city
1 Atik 1
2 Tania null
3 Anabia 3
Table City
ID Name
1 A
2 b
3 C
如果表NAME中的值为空,我试图从表CITY中选择一个值,否则,我想要名称中的值。结果应如下所示:
结果
ID Name city
1 Atik A
2 Tania null
3 Anabia B
这只有3列,但是我有很多这样的列。
答案 0 :(得分:1)
以这种方式使用correlated subquery:
SELECT id, name,
(SELECT Name FROM City c
WHERE c.id = n.city ) as City
FROM Name n
您还可以使用LEFT JOIN:
SELECT n.id,
n.name,
c.name as city
FROM Name n
LEFT JOIN City c
ON c.id = n.city
演示:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=600cdfc1cbf08b8bc2798229f02a3d96
| ID | NAME | CITY |
|----|--------|--------|
| 1 | Atik | A |
| 2 | Tania | (null) |
| 3 | Anabia | C |
答案 1 :(得分:1)
使用NVL2
检查表NULL
中的Name
值:
SELECT n.ID, n.Name, NVL2(n.city, c.Name, NULL) AS City
FROM Name n LEFT JOIN City c
ON c.ID = n.city
答案 2 :(得分:0)
您可以在ID字段上使用左连接,然后使用CASE
语句选择您的值。它应该足够灵活,以帮助您处理其他专栏。
SELECT
n.ID,
n.NAME,
CASE WHEN n.CITY IS NULL THEN NULL ELSE c.NAME END AS CITY
FROM
NAME n LEFT JOIN CITY c ON n.ID = c.ID