SQL内部結合クエリをPostgreSQL内部結合クエリに変換しようとしています。この内部結合クエリでは、すべてのテーブルが1つのデータベースに存在しないことをどのテーブルが使用していますか。テーブルを2つのデータベース、つまりアプリケーションデータベースとセキュリティデータベースに分割しました
私は以下のようにしようとしましたが、次のエラーが発生しています
エラー
ERROR: cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4: INNER JOIN "Rockefeller_ApplicationDb".public.userro..
SQLストアド関数
SELECT Department.nDeptID
FROM Users INNER JOIN Permission
ON Users.nUserID = Permission.nUserID INNER JOIN UserRoleMapping
ON Users.nUserID = UserRoleMapping.nUserID INNER JOIN Department
ON Permission.nDeptInst = Department.nInstID
AND Department.nInstID = 60
WHERE
Users.nUserID = 3;
PostgreSQLストアド関数
SELECT dep.ndept_id
FROM "Rockefeller_SecurityDb".public.users as u
INNER JOIN "Rockefeller_SecurityDb".public.permissions p ON u.nuser_id = p.nuser_id
INNER JOIN "Rockefeller_ApplicationDb".public.userrolemapping as urm ON u.nuser_id = urm.nuser_id
INNER JOIN "Rockefeller_ApplicationDb".public.department dep ON p.ndept_inst = dep.ninst_id
AND dep.ninst_id = 60
WHERE
u.nuser_id = 3;
異なるデータベースのテーブルを結合することはできません。
PostgreSQLでは、データベースは設計により論理的に分離されています。
テーブルを結合する場合は、テーブルを異なるデータベースではなく、1つのデータベースの異なるスキーマに配置する必要があります。
MySQLで「データベース」と呼ばれるものは、標準SQLでは「スキーマ」と呼ばれることに注意してください。
異なるデータベースのテーブルを本当に結合する必要がある場合は、外部データラッパーを使用する必要があります。