Ich habe 2 Tabellen: Main und Update mit Spalten Name, ID und Abteilung. Ich möchte zuerst die Haupttabelle lesen, und wenn der Abteilungsfeldwert leer ist, könnte ich es aus der Update-Tabelle lesen.Scala Slick - Wie man einen Spaltenwert aus verschiedenen Tabellen nimmt
Zum Beispiel aus der unten stehenden Tabelle, soll ich die Abteilung Wert für KING von Update-Tabelle erhalten.
Wie dies mit scala glitschig aus laufender Ebene SQL-Abfragen erreichen?
Haupt
+-------+----+------------+
+ name | id | department +
+-------+----+------------+
| KING | 10 | |
| BLAKE | 30 | SALES |
+-------+----+------------+
aktualisieren
+-------+----+------------+
+ name | id | department +
+-------+----+------------+
| KING | 10 | SYSTEMS |
| BLAKE | 30 | SALES |
+-------+----+------------+
Hier ist die Ebene SQL-Abfrage
SELECT
m.`name`,
m.`id`,
if(m.`department`='', u.`department`) as `department`
FROM `Main` m
FROM `Update` u ON m.id=u.id
Ich habe folgenden Code so weit definiert ...
case class Main(name: Option[String],
id: Option[int],
department: Option[String])
case class Update(name: Option[String],
id: Option[int],
department: Option[String])
lazy val mainQuery = TableQuery[MainTableDefinition]
lazy val updateQuery = TableQuery[UpdateTableDefinition]
class MainTableDefinition(tag: Tag) extends Table[Main](tag, "Main") {
def name = column[Option[String]]("name")
def id = column[Option[int]]("id")
def department = column[Option[String]]("department")
override def * =
(name, id, department)<> (Main.tupled, Main.unapply)
}
class UpdateTableDefinition(tag: Tag) extends Table[Update](tag, "Update") {
def name = column[Option[String]]("name")
def id = column[Option[int]]("id")
def department = column[Option[String]]("department")
override def * =
(name, id, department)<> (Update.tupled, Update.unapply)
}
val query = for {
m <- mainQuery
u <- updateQuery if m.id === u.id
} yield (m, u)
db.run(query.to[List].result)
Sie möchten vielleicht definieren eine benutzerdefinierte Funktion 'coalesce' (https://www.postgresql.org/docs/9.2/static/functions-conditional.html) und verwenden' '' val query = für { m <- mainQuery u <- updateQuery wenn m.id === u.id Abteilung = coalesce (m.department, u.department) } Ausbeute (m.id, Abteilung) '' ' –