【发布时间】:2019-02-03 15:36:08
【问题描述】:
我想创建一个只显示结果而不显示重复项的视图,我在 oracle 数据库中有 3 个表:
第一个表格包含一个人的一般信息
+-----------+-------+-------------+
| 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 |MAIL_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 |
+------+----------+----------+---------------+
如果我对这些表进行内部连接,结果将执行类似的操作
+-----+-------+-------------+----------+----------+----------+----------------+
| ID | Name | Birtday_date| CELL_TYPE| NUMBER |MAIL_TYPE|Email |
+-----+-------+-------------+----------+----------+----------+----------------+
| 1 | Byron | 12/10/1998 | 3 | 099141021|1 |jdoe@aol.com |
| 1 | Byron | 12/10/1998 | 3 | 099141021|2 |jdoe1@aol.com |
| 1 | Byron | 12/10/1998 | 2 | 099091925|1 |jdoe@aol.com |
| 1 | Byron | 12/10/1998 | 2 | 099091925|2 |jdoe1@aol.com |
| 1 | Byron | 12/10/1998 | 1 | 098041013|1 |jdoe@aol.com |
| 1 | Byron | 12/10/1998 | 1 | 098041013|2 |jdoe1@aol.com |
| 2 | Peter | 01/11/1973 | 1 | 088043153|1 |xx12@yahoo.com |
| 2 | Peter | 01/11/1973 | 1 | 088043153|2 |dsdsa@gmail.com |
| 2 | Peter | 01/11/1973 | 2 | 090044313|1 |xx12@yahoo.com |
| 2 | Peter | 01/11/1973 | 2 | 090044313|2 |dsdsa@gmail.com |
| 4 | Jose | 05/02/2008 | 1 | 088043153|1 |sasaw1@sdas.com |
| 4 | Jose | 05/02/2008 | 1 | 088043153|2 |cvcvsd@wew.es |
| 4 | Jose | 05/02/2008 | 2 | 088043153|1 |sasaw1@sdas.com |
| 4 | Jose | 05/02/2008 | 2 | 088043153|2 |cvcvsd@wew.es |
+-----+-------+-------------+----------+----------+----------+----------------+
所以我将在视图中呈现的结果是下一个
+-----+-------+-------------+----------+----------+----------+----------------+
| ID | Name | Birtday_date| CELL_TYPE| NUMBER |MAIL_TYPE|Email |
+-----+-------+-------------+----------+----------+----------+----------------+
| 1 | Byron | 12/10/1998 | 3 | 099141021|1 |jdoe@aol.com |
| 1 | Byron | 12/10/1998 | | |2 |jdoe1@aol.com |
| 1 | Byron | 12/10/1998 | 2 | 099091925| | |
| 1 | Byron | 12/10/1998 | 1 | 098041013| | |
| 2 | Peter | 01/11/1973 | 1 | 088043153|1 |xx12@yahoo.com |
| 2 | Peter | 01/11/1973 | | |2 |dsdsa@gmail.com |
| 2 | Peter | 01/11/1973 | 2 | 090044313| | |
| 4 | Jose | 05/02/2008 | 1 | 092049013|1 |sasaw1@sdas.com |
| 4 | Jose | 05/02/2008 | | |2 |cvcvsd@wew.es |
| 4 | Jose | 05/02/2008 | 2 | 098090233| | |
+-----+-------+-------------+----------+----------+----------+----------------+
我尝试使用
实现类似的输出case
when row_number() over (partition by table1.id order by table2.type) = 1
then table1.value
end
as "VALUE"
但结果出乎我的意料,有些行重复了
【问题讨论】:
-
对两个表表达式使用左外连接,每个表达式都使用 row_number()。
标签: sql oracle oracle11g inner-join