ここで間違っているかもしれませんが、ほとんどの既存のリレーショナルデータベースでは、1回の操作で複数のデータベースにまたがることはできません。しかし、上に示した内容はschema
を使用することで簡単に達成できます(そして、これはあなたが本当に達成したいと強く信じています - あなたがペーストしたSQLによって判断してください)。
例があります。私はしかし、変更した場合
select x2."STUDENT_ID", x2."NAME", x2."UUID", x2."ID", x3."NAME", x3."MIDDLE_NAME", x3."SURNAME", x3."NATIONALITY", x3."ID"
from "DOCUMENT" x2
left outer join "STUDENT" x3 on x2."STUDENT_ID" = x3."ID"
where x3."NAME" = 'Test'
:以下のSQLを生成します
DocumentTable
.joinLeft(StudentTable).on(_.studentId === _.id)
.filter { case(doc, student) => student.map(_.name) === "Test" }
:
// student
case class Student(name: String,
middleName: Option[String],
surname: String,
nationality: String,
id: Id[Student] = Id.none)
class StudentTable(tag: Tag) extends Table[Student](tag, "STUDENT") {
def name = column[String]("NAME")
def middleName = column[Option[String]]("MIDDLE_NAME")
def surname = column[String]("SURNAME")
def nationality = column[String]("NATIONALITY")
def id = column[Id[Student]]("ID", O.PrimaryKey, O.AutoInc)
def * = (name, middleName, surname, nationality, id) <> (Student.tupled, Student.unapply)
}
lazy val StudentTable = TableQuery[StudentTable]
// document
case class Document(studentId: Option[Id[Student]],
name: String,
uuid: String,
id: Id[Document] = Id.none)
class DocumentTable(tag: Tag) extends Table[Document](tag, "DOCUMENT") {
def studentId = column[Option[Id[Student]]]("STUDENT_ID")
def name = column[String]("NAME")
def uuid = column[String]("UUID")
def id = column[Id[Document]]("ID", O.PrimaryKey, O.AutoInc)
def * = (studentId, name, uuid, id) <> (Document.tupled, Document.unapply)
def student = foreignKey("fk_document_student", studentId, StudentTable)(_.id.?)
}
lazy val DocumentTable = TableQuery[DocumentTable]
は、次のクエリを行う:さんは次のように我々はSlick
関連のコード内で定義された2つのテーブルを持っていると仮定しましょう私のテーブル定義は:
class StudentTable(tag: Tag) extends Table[Student](tag, _schemaName = Option("database2"), "STUDENT") {
...
- - 特定のテーブルを指定されたスキーマを前置する必要があることを示し、私は一つのパラメータを追加し3210
この
class DocumentTable(tag: Tag) extends Table[Document](tag, _schemaName = Option("database1"), "DOCUMENT") {
...
注意。私が持っているだろう
は(同じスリッククエリ)は、次のSQLは現在、生成された:そうです
select x2."STUDENT_ID", x2."NAME", x2."UUID", x2."ID", x3."NAME", x3."MIDDLE_NAME", x3."SURNAME", x3."NATIONALITY", x3."ID"
from "database1"."DOCUMENT" x2
left outer join "database2"."STUDENT" x3 on x2."STUDENT_ID" = x3."ID"
where x3."NAME" = 'Test'
があなたが達成したいものを正確にします。