下面是我遇到的问题的类似示例:
如果我有这个 * 表1 *:
| 患者ID|姓名|入住日期|订单名称|执行人|
| - ------| - ------| - ------| - ------| - ------|
| 1个|杰克|二○ ○二年九月十二日|X射线|Dr.Amal|
| 第二章|诺拉|二○ ○二年十月十五日|超音波|Dr.Goerge|
| 1个|杰克|二○ ○三年十一月十三日|医学|Dr.Fred|
- 表二 *:
| 患者ID|姓名|入住日期|订单名称|
| - ------| - ------| - ------| - ------|
| 1个|杰克|二零零二年六月十四日|X射线2|
| 第二章|诺拉|二○ ○二年十月十五日|超音波|
| 1个|杰克|二○ ○三年十一月十三日|医学|
| 三个|拉斐尔|二○ ○三年十一月十三日|疫苗|
我需要的结果如下:
| 姓名|入住日期|订单名称|执行人|
| - ------| - ------| - ------| - ------|
| 杰克|二○ ○二年九月十二日|X射线|Dr.Amal|
| 诺拉|二○ ○二年十月十五日|超音波|Dr.Goerge|
| 杰克|二○ ○三年十一月十三日|医学|Dr.Fred|
| 杰克|二零零二年六月十四日|X射线2|无效|
| 拉斐尔|二○ ○三年十一月十三日|疫苗|无效|
如果您注意到,我需要的结果是表1和表2中的所有记录,没有重复,连接相同的公共字段,并添加表1中的"Preformed by"列。我尝试按如下方式使用"UNION":
SELECT Name, Check_in_Date, order_name,preformed_by
FROM table1
UNION
SELECT Name, Check_in_Date, order_name,''
FROM table2
我得到的结果是每个患者有2条记录,日期相同,一条记录由一条记录执行,一条记录为空,如下所示:
| 姓名|入住日期|订单名称|执行人|
| - ------| - ------| - ------| - ------|
| 杰克|二○ ○二年九月十二日|X射线|Dr.Amal|
| 诺拉|二○ ○二年十月十五日|超音波|Dr.Goerge|
| 诺拉|二○ ○二年十月十五日|超音波|无效|
| 杰克|二○ ○三年十一月十三日|医学|Dr.Fred|
| 杰克|二○ ○三年十一月十三日|医学|零|
| 杰克|二零零二年六月十四日|X射线2|无效|
| 拉斐尔|二○ ○三年十一月十三日|疫苗|无效|
如果同一ID在两个表中具有相同的登记日期,则必须返回表1中的执行人,而不是空值。我该如何操作?
谢谢你。
1条答案
按热度按时间bwleehnv1#
您需要的是一个**
FULL JOIN
匹配这三个列沿着NVL()
**函数,以便从 table2 中获取值,该值从 table1 返回null
,例如***或*另一个方法使用
UNION
**筛选出重复项,然后应用OUTER JOIN
,如Demo