Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从oracle join确定唯一值?_Oracle_Join_Oracle11g - Fatal编程技术网

从oracle join确定唯一值?

从oracle join确定唯一值?,oracle,join,oracle11g,Oracle,Join,Oracle11g,我需要一种方法来避免oracle join中的重复值,我有这个场景 第一个表包含有关个人的一般信息 +-----------+-------+-------------+ | ID | Name | Birtday_date| +-----------+-------+-------------+ | 1 | Byron | 12/10/1998 | | 2 | Peter | 01/11/1973 | | 4 | Jose

我需要一种方法来避免oracle join中的重复值,我有这个场景

第一个表包含有关个人的一般信息

+-----------+-------+-------------+
| ID        | Name  | Birtday_date|
+-----------+-------+-------------+
| 1         | Byron | 12/10/1998  |
| 2         | Peter | 01/11/1973  |
| 4         | Jose  | 05/02/2008  |
+-----------+-------+-------------+
第二个表包含第一个表中人员的电话信息

+-------+----------+----------+----------+
| ID    |ID_Person |CELL_TYPE | NUMBER   |
+-------+- --------+----------+----------+
| 1221  | 1        | 3        | 099141021|
| 2221  | 1        | 2        | 099091925|
| 3222  | 1        | 1        | 098041013|
| 4321  | 2        | 1        | 088043153|
| 4561  | 2        | 2        | 090044313|
| 5678  | 4        | 1        | 092049013|
| 8990  | 4        | 2        | 098090233|
+----- -+----------+----------+----------+
+------+----------+----------+---------------+
| ID   |ID_Person |EMAIL_TYPE| Email         |
+------+- --------+----------+---------------+
| 221  | 1        | 1        |jdoe@aol.com   |
| 222  | 1        | 2        |jdoe1@aol.com  |
| 421  | 2        | 1        |xx12@yahoo.com |
| 451  | 2        | 2        |dsdsa@gmail.com|
| 578  | 4        | 1        |sasaw1@sdas.com|
| 899  | 4        | 2        |cvcvsd@wew.es  |
| 899  | 4        | 2        |cvsd@www.es    |
+------+----------+----------+---------------+
第三个表包含第一个表中人员的电子邮件信息

+-------+----------+----------+----------+
| ID    |ID_Person |CELL_TYPE | NUMBER   |
+-------+- --------+----------+----------+
| 1221  | 1        | 3        | 099141021|
| 2221  | 1        | 2        | 099091925|
| 3222  | 1        | 1        | 098041013|
| 4321  | 2        | 1        | 088043153|
| 4561  | 2        | 2        | 090044313|
| 5678  | 4        | 1        | 092049013|
| 8990  | 4        | 2        | 098090233|
+----- -+----------+----------+----------+
+------+----------+----------+---------------+
| ID   |ID_Person |EMAIL_TYPE| Email         |
+------+- --------+----------+---------------+
| 221  | 1        | 1        |jdoe@aol.com   |
| 222  | 1        | 2        |jdoe1@aol.com  |
| 421  | 2        | 1        |xx12@yahoo.com |
| 451  | 2        | 2        |dsdsa@gmail.com|
| 578  | 4        | 1        |sasaw1@sdas.com|
| 899  | 4        | 2        |cvcvsd@wew.es  |
| 899  | 4        | 2        |cvsd@www.es    |
+------+----------+----------+---------------+
我能够产生这样一个结果,你可以检查这个链接

如果您检查表Email for user with
ID_Person=4
中的数据,则仅显示三封电子邮件中的两封,这种情况下的问题是该用户的电子邮件多于手机号码,并且只显示相同的手机号码

我期望的结果是这样的

    +-----+-------+-------------+----------+----------+----------+----------------+
    | ID  | Name  | Birtday_date| CELL_TYPE|  NUMBER  |EMAIL_TYPE|EMAIL|
    +-----+-------+-------------+----------+----------+----------+----------------+
    | 1   | Byron | 12/10/1998  | 3        | 099141021|1         |jdoe@aol.com    |   
    | 1   | Byron | 12/10/1998  | 2        | 099091925|2         |jdoe1@aol.com   | 
    | 1   | Byron | 12/10/1998  | 1        | 099091925|          |                | 
    | 2   | Peter | 01/11/1973  | 1        | 088043153|1         |xx12@yahoo.com  |
    | 2   | Peter | 01/11/1973  | 2        | 090044313|2         |dsdsa@gmail.com |
    | 4   | Jose  | 05/02/2008  | 1        | 092049013|1         |sasaw1@sdas.com |
    | 4   | Jose  | 05/02/2008  | 2        | 098090233|2         |cvcvsd@wew.es   |
    | 4   | Jose  | 05/02/2008  |          |          |2         |cvsd@www.es     |
    +-----+-------+-------------+----------+----------+----------+----------------+

这就是我需要显示数据的方式。

我无法理解您的查询为何如此复杂,因此,添加了简单的完全外部联接,它似乎正在工作:

select distinct p.id, p.name,
case when Lag(CELL) over(partition by p.id order by p.id,pe.id) = CELL then null else cell_type end as cell_type,
case when Lag(CELL) over(partition by p.id order by p.id,pe.id) = CELL then null else CELL end as CELL,
EMAIL_TYPE as EMAIL_TYPE, EMAIL as EMAIL
from person p full outer join phones pe on p.id = pe.id 
full outer join emails e
on p.id = e.id and pe.cell_type = e.email_type;

你能不能也解释一下,你的预期结果是什么?我可以看到拜伦有3部电话和2封电子邮件。在这种情况下,您希望在输出中看到什么?嗨,我添加了一个我所期望的结果的示例,我得到了它,但这并不能解释为什么结果看起来是这样的。为什么何塞在结果中出现了三次,为什么其他人只出现了两次?为什么电话和电子邮件连在一起。尝试解释预期输出背后的逻辑。请使您的问题独立。包括所有需要的,不要让我们跟随链接。尤其是不到你的个人资料,然后再根据“我昨天解释过”。将必要的解释和代码作为文本输入到您的问题中。谢谢,我更新了我期望的结果,上次是错误的谢谢,但我的问题是避免从联接中重复值,我更新了我期望的结果,上次是错误的。非常感谢,一个问题是,如果我有相同的场景,具有相同的预期结果,但电子邮件类型和单元格类型没有相同的值,那么应该如何进行加入??