Oracle SQL或PL / SQL相关的更新列值是/否

里查

我试图通过相关更新来更新具有多个值(Y / N)的单列,但出现错误时可以使用:

ORA-01427:单行子查询返回多个行。

我有两张桌子。

REQUESTS_TABLE

+-------------+------+
| CUSTOMER_ID | FLAG |
+-------------+------+
|         200 |      |
|         900 |      |
+-------------+------+

CREDITS_TABLE

+-------------+---------------+
| CUSTOMER_ID | CUSTOMER_NAME |
+-------------+---------------+
|         100 | John          |
|         200 | Smith         |
|         300 | Mary          |
|         400 | David         |
|         500 | Jake          |
+-------------+---------------+

如果贷方表中存在来自请求表的customer_id,那么我想将请求表中的“ FLAG”列更新为“ Y”。如果找不到,则为“ N”。以下是我试图获取的输出:

输出: REQUESTS_TABLE

+-------------+------------+
| CUSTOMER_ID | FOUND_FLAG |
+-------------+------------+
|         200 | Y          |
|         900 | N          |
+-------------+------------+

以下是我尝试过的查询,导致错误:

UPDATE requests_table r 
SET    ( flag ) = (SELECT CASE 
                            WHEN c.customer_id IS NOT NULL THEN 'Y' 
                            ELSE 'N' 
                          END 
                   FROM   credits_table c 
                   WHERE  c.customer_id = r.customer_id) 
WHERE  EXISTS (SELECT * 
               FROM   credits_table c 
               WHERE  c.customer_id = r.customer_id) 

当我在线搜索帮助时,我发现查询会更新多个列,但不会更新单个列中的多个值。因此在这里寻求帮助。

感谢任何帮助。

谢谢,理

卢卡斯·索兹达(Lukasz Szozda)

您可以使用:

UPDATE requests_table
SET found_flag = CASE WHEN EXISTS(SELECT c.customer_id FROM credits_table c 
                                 WHERE c.customer_id = requests_table.customer_id)
                      THEN 'Y'
                      ELSE 'N'
                 END

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章