假设有表 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 查询进行哪些更改?
在
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>