如何在同一个表上创建具有多个连接的视图
Posted
技术标签:
【中文标题】如何在同一个表上创建具有多个连接的视图【英文标题】:How to create view with multiple joins on same table 【发布时间】:2015-10-29 15:12:43 【问题描述】:在我的数据库中,我有这两个表:
人物
+----+---------+---------+
| pk | name | sirname |
+----+---------+---------+
| 1 | john | leno |
| 2 | william | wallice |
| 3 | eva | apple |
| 4 | walter | white |
+----+---------+---------+
请求
+----+-------------+----------+---------------+---------+---------+
| pk | requestdate | accepted | requestperson | parent1 | parent2 |
+----+-------------+----------+---------------+---------+---------+
| 1 | 1/1/2014 | Y | 1 | 2 | 3 |
| 2 | 1/2/2014 | N | 4 | NULL | NULL |
+----+-------------+----------+---------------+---------+---------+
为了得到我所做的请求:
SELECT *
FROM request
LEFT JOIN person p_subject ON requestperson = p_subject.pk
LEFT JOIN person p_parent1 ON parent1 = p_parent1.pk
LEFT JOIN person p_parent2 ON parent2 = p_parent2.pk
这很完美,但是当我想创建一个视图时:
CREATE VIEW v_request AS
SELECT *
FROM request
LEFT JOIN person p_subject ON requestperson = p_subject.pk
LEFT JOIN person p_parent1 ON parent1 = p_parent1.pk
LEFT JOIN person p_parent2 ON parent2 = p_parent2.pk
我收到此错误:ORA-00957: duplicate column name
我不想手动重命名所有列。我该如何解决这个问题?
【问题讨论】:
CREATE VIEW v_request (cname1, cname2, ... ) AS 是最简单的方法。 您肯定需要在某处列出列名;几乎没有办法解决这个问题。 我认为重命名视图中的列会比写下问题花费更少的时间......只是说。你为什么不想重命名它们呢?否则,您如何引用正确连接中的值? (即哪个 sirname 列是父姓与主题 sirname?) 【参考方案1】:您的视图将包括:
三列,列名pk
三列,列名name
(这不是一个好的列名)
三列,列名sirname
因为表格别名不会自动添加(错误ORA-00957: duplicate column name
准确说明)
我很确定您必须手动将它们重命名为 subject_pk
、subject_name
、subject_sirname
等等。
【讨论】:
以上是关于如何在同一个表上创建具有多个连接的视图的主要内容,如果未能解决你的问题,请参考以下文章