【问题标题】: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?)

标签: sql oracle view oracle-apex


【解决方案1】:

您的视图将包括:

  • 三列,列名pk
  • 三列,列名name(这不是一个好的列名)
  • 三列,列名sirname

因为表格别名不会自动添加(错误ORA-00957: duplicate column name 准确说明)

我很确定您必须手动将它们重命名为 subject_pksubject_namesubject_sirname 等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多