【发布时间】:2020-07-16 13:26:54
【问题描述】:
我需要你的帮助。我有两个数据库(例如 PEN 和 PAPER),其中的表需要连接。 db PEN 中的表名是 PEN.ORDER。 db PAPER 中的表名是 PAPER.ORDER。
我正在使用 PAPER db
SELECT SUPPLIER_NAME
FROM PAPER.ORDER AS A
INNER JOIN PEN.PEN.ORDER AS B
ON A.SUPPLIER_ID=B.SUPPLIER_ID
它看不到 PEN 数据库中的表。尝试写 PEN."PEN.ORDERS" 和 PEN.[PEN.ORDERS] 但没有任何帮助。
但是当我用不同的数据库尝试类似的事情时,表名不包含点,它工作得很好。在 PAPER db 中就像:
SELECT SUPPLIER_NUMBER
FROM PAPER.ORDER AS A
INNER JOIN BOOK.ORDERS AS B
ON A.SUPPLIER_NUMBER=B.SUPPLIER_NUMBER
这里它起作用了,因为 BOOK db 中的表名只是 ORDERS,没有任何用点分隔的第二个单词。
【问题讨论】:
-
您收到错误消息吗?你应该这样做,因为这不是 Oracle 的有效语法。
-
您确定您使用的是 Oracle 意义上的“数据库”吗? Oracle 中的
pen.order指的是pen模式中的order表,paper.order指的是paper模式中的order表。两种模式都在同一个数据库中,只是模式不同。如果您的意思是它们位于不同的数据库中,则需要两个数据库之间的数据库链接。 -
但是当我用不同的数据库尝试类似的事情时,表名不包含点,它工作得很好。在 PAPER db 中就像:从 PAPER.ORDER 中选择 SUPPLIER_NUMBER 作为 A.SUPPLIER_NUMBER=B.SUPPLIER_NUMBER 上的 A INNER JOIN BOOK.ORDERS AS B 在这种情况下,我没有任何问题。 BOOK 是一个不同的数据库,我连接到它,表名只是 ORDERS。
-
您似乎仍然不了解“数据库”和“模式”之间的区别。在 oracle 中,表名不也不能包含点。在我看来,您正在对 Oracle 进行 MS SQL Server 理解。那是行不通的。 “数据库”的定义是不同的。在 mssql 中通常称为“数据库”的是 Oracle 中的“模式”(用户拥有的对象的集合)。请重新阅读@Justin Cave 之前的评论
-
PL/SQL 不是 Oracle 数据库或 Oracle SQL 的名称。我什至不会对它是什么 感到厌烦——只是不要使用该名称来指代Oracle SQL。我会相应地编辑你的帖子。
标签: sql oracle join inner-join multiple-databases