有没有办法连接两个表,其中任何一个表都不会返回结果?

问题描述 投票:0回答:1

假设有表 A 和表 B。 表 A --

人员ID 血压 心率
1 140/77 88
2 138/75 76

表 B --

人员ID 高度英寸 重量磅
1 68 170
3 71 165

我正在寻找一种在单个查询中从两个表中进行选择的方法,但在确定产生我想要的结果的 JOIN 时遇到问题,并且开始认为 JOIN 可能不是执行此操作的正确方法。

如果我这样做

SELECT A.BloodPressure, A.HeartRate, B.HeightInches, B.WeightLbs 
FROM A 
LEFT JOIN B ON A.PersonId = B.PersonId 
WHERE A.PersonId = 1

然后,我得到了以下形式的期望结果

人员ID 血压 心率 高度英寸 重量磅
1 140/77 88 68 170

当使用相同的查询查找PersonId = 3的数据时,它只是没有返回任何结果。

如果使用 PersonId = 2,由于存在结果行,结果仍然可以接受。

人员ID 血压 心率 高度英寸 重量磅
1 138/75 76

我想明白为什么PersonId = 3不会返回任何结果;表 A 上的 SELECT 不会返回任何内容,因此在进行 JOIN 时,没有 PatientId 值来标识应与表 B 中的哪一行进行连接。

我希望能够获得一个包含表 A 和表 B 中所有列的结果表,如果任一表中的实际值为空也没关系,我只需要找到一种方法来获取结果如果 PersonId = 3 且事先不知道哪些表包含相应 PersonId 的数据。

我正在寻找的东西可以实现吗?如果是这样,需要对 SELECT 查询进行哪些更改?

oracle oracle-sqldeveloper
1个回答
0
投票

in
子句中使用
where
进行完全外连接怎么样?

SQL> with
  2  ta (id, pressure, heart) as
  3    (select 1, '140/77', 88 from dual union all
  4     select 2, '138/75', 76 from dual
  5    ),
  6  tb (id, height, weight) as
  7    (select 1, 68, 170 from dual union all
  8     select 3, 71, 165 from dual
  9    )
 10  select ta.*, tb.*
 11  from ta full outer join tb on ta.id = tb.id
 12  where &par_value in (ta.id, tb.id);
Enter value for par_value: 1

        ID PRESSU      HEART         ID     HEIGHT     WEIGHT
---------- ------ ---------- ---------- ---------- ----------
         1 140/77         88          1         68        170

SQL> /
Enter value for par_value: 2

        ID PRESSU      HEART         ID     HEIGHT     WEIGHT
---------- ------ ---------- ---------- ---------- ----------
         2 138/75         76

SQL> /
Enter value for par_value: 3

        ID PRESSU      HEART         ID     HEIGHT     WEIGHT
---------- ------ ---------- ---------- ---------- ----------
                                      3         71        165

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.