ORACLE:返回值或空值

qrjkbowd  于 2022-11-22  发布在  Oracle
关注(0)|答案(3)|浏览(196)

我 有 * * 用户 表 * *
| 用户 标识|姓名|姓氏|
| - -| - -| - -|
| 千|汤姆|多 伊|
| 二 ○ ○ ○ 年|蒂娜|多 伊|
| 三千|米 迦勒|多 伊|
| 四千|罗贝尔|多 伊|
和 具有 * * 值 * * 的 表
| 用户 标识|价值|
| - -| - -|
| 千|10 个|
| 二 ○ ○ ○ 年|二十 个|
| 三千|四十|
| 四千|二十 个|
| 千|二十 个|
| 三千|10 个|
| 四千|三十|
现在 , 我 想 编写 一 个 SQL 语句 , 列出 所有 * * 值 为 10 * * 的 用户 , 如果 该 值 不是 10 或 表 中 没有 值 , 则 应 返回 * * null * * 。
| 用户 标识|姓名|姓氏|价值|
| - -| - -| - -| - -|
| 千|汤姆|多 伊|10 个|
| 二 ○ ○ ○ 年|蒂娜|多 伊|零 值|
| 三千|米 迦勒|多 伊|10 个|
| 四千|罗贝尔|多 伊|零 值|
我 如何 才能 实现 这 一 点 ?

h79rfbju

h79rfbju1#

使用LEFT JOIN,将值表中的值限制为10。如果没有值10,将自动给予NULL:

SELECT 
  USERS.*, 
  USER_VALUES.VALUE
FROM USERS
LEFT JOIN USER_VALUES
ON USERS.USER_ID = USER_VALUES.USER_ID
AND USER_VALUES.VALUE = 10
ORDER BY USERS.USER_ID

我添加了dbfiddle

yb3bgrhw

yb3bgrhw2#

这就是外部连接:
示例数据:

SQL> with
  2  tuser (user_id, firstname) as
  3    (select 1000, 'Tom'    from dual union all
  4     select 2000, 'Tina'   from dual union all
  5     select 3000, 'Michael'from dual union all
  6     select 4000, 'Robert' from dual
  7    ),
  8  tvalues (user_id, value) as
  9    (select 1000, 10 from dual union all
 10     select 2000, 20 from dual union all
 11     select 3000, 40 from dual union all
 12     select 4000, 20 from dual union all
 13     select 1000, 20 from dual union all
 14     select 3000, 10 from dual union all
 15     select 4000, 30 from dual
 16    )

查询:

17  select a.user_id, a.firstname, b.value
 18  from tuser a left join tvalues b on b.user_id = a.user_id and b.value = 10
 19  order by a.user_id;

   USER_ID FIRSTNA      VALUE
---------- ------- ----------
      1000 Tom             10
      2000 Tina
      3000 Michael         10
      4000 Robert

SQL>
7rfyedvj

7rfyedvj3#

您只需要一个子查询和一个LEFT连接-

SELECT U.USER_ID, U.FIRSTNAME, U.LASTNAME, V.VALUE
  FROM users U
  LEFT JOIN (SELECT USER_ID, VALUE
               FROM values
              WHERE values = 10) V ON U.USER_ID = V.USER_ID

相关问题