SQL查询辅助(oracle)-新

xurqigkl  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(83)

我有两个表,其中包含以下列:DOCCHECK(skill,usernum,checknum)SKILL(skill,checknum)
我得到usernum和skill的输入If(input_usernum = DOCCHECK.usernum and DOCCHECK.skill=inputskill),然后我返回DOCCHECK.checknum,否则我返回SKILL.checknum,其中SKILL.skill
示例:

DOCCHECK

+-------+----------+-----------+
| skill |  usernum |  checknum |
+-------+----------+-----------+
|     1 |      111 |        30 |
|     2 |      222 |        99 |
|     3 |      111 |         4 |
+-------+----------+-----------+

技能

+-------+-----------+
| skill |  checknum |
+-------+-----------+
|     1 |         4 |
|     2 |        30 |
|     3 |        50 |
|     4 |         2 |
+-------+-----------+

预期结果

input user: 333, 3 - should return checknum - 50
input user: 222,2 - should return - 99
input user: 222,3 - should return 50

谢谢你

rqdpfwrv

rqdpfwrv1#

任何时候,如果您需要从表中获取某些内容(在您的示例中,只有doccheck存在时),您至少应该考虑外部连接。
那么

SELECT    coalesce(dc.checknum, s.checknum)
FROM      skill s
LEFT JOIN doccheck dc ON dc.skill = s.skill AND dc.usernum = :input_usernum
WHERE     s.skill = :input_skill

该查询将首先查找与用户输入匹配的skill行,然后查找与用户输入匹配的doccheck行 *(如果存在)。如果它不存在,则为doccheck返回的所有列值都将是null。然后,我们使用coalesce返回doccheck.checknum值(如果找到),否则返回skill.checknum值。
注意,在我的示例中,:input_usernum:input_skill是表示用户输入的绑定变量。它们也可以是`PL/SQL变量:

SELECT    coalesce(dc.checknum, s.checknum)
FROM      skill s
LEFT JOIN doccheck dc ON dc.skill = s.skill AND dc.usernum = p_input_usernum
WHERE     s.skill = p_input_skill

或者它们可以是字面量(尽管这对于其他不相关的原因来说是不好的):

SELECT    coalesce(dc.checknum, s.checknum)
FROM      skill s
LEFT JOIN doccheck dc ON dc.skill = s.skill AND dc.usernum = 333
WHERE     s.skill = 3

相关问题