Scala Slick生成嵌套SQL

Scala Slick生成嵌套SQL,scala,slick,Scala,Slick,我正在尝试创建虚拟表,并在需要时将其连接到真实表。 出于兼容性原因,我正在使用slick 3.0。 数据库是MySql 代码如下所示: def linkTable(data: Seq[(Int, Int)]): Query[(Rep[Int], Rep[Int]), (Int, Int), Seq] = { val tableRows: Seq[Query[(ConstColumn[Int], ConstColumn[Int]), (Int, Int), Seq]] = {

我正在尝试创建虚拟表,并在需要时将其连接到真实表。 出于兼容性原因,我正在使用slick 3.0。 数据库是MySql

代码如下所示:

def linkTable(data: Seq[(Int, Int)]): Query[(Rep[Int], Rep[Int]), (Int, Int), Seq] = {

      val tableRows: Seq[Query[(ConstColumn[Int], ConstColumn[Int]), (Int, Int), Seq]] = {
        data.map { case (groupId, merchantId) =>
          Query(groupId, merchantId)
        }
      }

      if (tableRows.isEmpty) {
        Query(-1, -1)
      } else {
        tableRows.reduceLeft(_ union _)
      }
    }
结果类型:

Query[(Rep[Int], Rep[Int]), (Int, Int), Seq]
这正是我能够将虚拟表集成到代码库中所需要的

函数linkTable工作正常,只是它生成了嵌套sql:

    (SELECT x7.x8  AS x9,
            x7.x10 AS x11
    FROM   (
             SELECT x12.x13 AS x8,
                    x12.x14 AS x10
             FROM   (
                      SELECT x15.x16 AS x13,
                             x15.x17 AS x14
                      FROM   (
                               SELECT 1 AS x16,
                                      3 AS x17
                               FROM   DUAL
                               UNION
                               SELECT 2 AS x16,
                                      3 AS x17
                               FROM   DUAL) x15
                      UNION
                      SELECT 3 AS x13,
                             3 AS x14
                      FROM   DUAL) x12
             UNION
             SELECT 4 AS x8,
                    3 AS x10
             FROM   DUAL) x7
             UNION
             SELECT 5 AS x9,
                    3 AS x11
             FROM   DUAL) x18
这会导致以下错误:

java.sql.SQLException: Too high level of nesting for select
我需要的是使这些工会扁平化:

    (SELECT 1 AS x7,
           3 AS x8
    FROM   DUAL
    UNION
    SELECT 2 AS x7,
           3 AS x8
    FROM   DUAL
    UNION
    SELECT 3 AS x7,
           3 AS x8
    FROM   DUAL
    UNION
    SELECT 4 AS x7,
           3 AS x8
    FROM   DUAL
    UNION
    SELECT 5 AS x7,
           3 AS x8
    FROM   DUAL
    ) x9
有人知道如何用slick 3.0实现这一点吗?
从字符串进行查询是有效的选项,但结果类型应该是正确的。

在slick中使用原始SQL如何?@SarveshKumarSingh,正如我所说的,这是一个好选项。但我不知道如何做到这一点,并得到正确的结果类型。你能给我举个例子吗?.slick中的原始SQL怎么样?@SarveshKumarSingh,正如我说的,这是一个不错的选择。但我不知道如何做到这一点,并得到正确的结果类型。你能举个例子吗?。