Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 删除Slick生成的查询中的别名_Postgresql_Scala_Slick - Fatal编程技术网

Postgresql 删除Slick生成的查询中的别名

Postgresql 删除Slick生成的查询中的别名,postgresql,scala,slick,Postgresql,Scala,Slick,我在应用程序中使用Slick进行数据库操作(使用Postgres作为数据库)。在尝试构建通用查询时,我遇到了一些问题。 我在SO中问了一个问题,关于使用表名而不是别名(),但发现这是不可能的 因此,我现在正试图解决这个问题 def ++= (selectStatement:String) ={ this.customSelectStatement = Some(selectStatement + " E where " + getQuery(filterPropertyList))

我在应用程序中使用Slick进行数据库操作(使用Postgres作为数据库)。在尝试构建通用查询时,我遇到了一些问题。 我在SO中问了一个问题,关于使用表名而不是别名(),但发现这是不可能的

因此,我现在正试图解决这个问题

def ++= (selectStatement:String) ={
    this.customSelectStatement = Some(selectStatement + " E where " +  getQuery(filterPropertyList))
  }

filterQuery ++= (TableQuery[SkillTable] innerJoin TableQuery[SkillCategoryTable] on (_.skillCategoryId === _.id)).sortBy(_._1.id).map{ case (a,at) => (a.id,a.name,at.name)}.selectStatement
    val result = filter[SkillContainer](filterQuery)
方法
getQuery
基于接收到的属性构建一个SQLWHERE条件查询。我使用光滑的表达式构建select子句,然后将其转换为SQL查询,然后通过
getQuery
附加where条件

当我运行代码时,将生成如下查询:

SELECT x2.x3,
       x2.x4,
       x5.x6
FROM (
  SELECT x7."SkillId" AS x3,
         x7."Name" AS x4,
         x7."Description" AS x8,
         x7."IsRemoved" AS x9,
         x7."SkillCategoryId" AS x10
  FROM "base"."Skill" x7
) x2
  INNER JOIN (
    SELECT x11."SkillCategoryId" AS x12,
           x11."Name" AS x6,
           x11."Description" AS x13,
           x11."IsRemoved" AS x14
    FROM "base"."SkillCategory" x11
  ) x5 ON x2.x10 = x5.x12
WHERE base."Skill"."IsRemoved" = 'false' 
LIMIT 10 offset 0
但是上面的查询将失败,因为
base。“Skill”“IsRemoved”
将不会被解析,因为我用别名生成了查询。但是,如果我将其更改为
x2.x9='false'
,则查询将成功执行

where条件查询是通过
getQuery
方法构建的,它不知道要使用的别名。 有没有什么方法可以让Slick不要为列生成别名,并且在表达式本身中提供子查询别名(x2),这样我就可以控制子查询的别名了?

“maybefilter”可能允许您在不连接SQL字符串的情况下使用类型安全的Slick api来实现这一点

除此之外,如果可能的话,删除别名将是对查询编译器的一个很好的改进,我过去也曾想过这一点。请添加一张票: