首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scala Slick:如何执行except join (带有is null的左外join )?

Scala Slick是一个用于Scala语言的轻量级数据库访问库,它提供了一种函数式的、类型安全的方式来执行数据库操作。在使用Scala Slick进行数据库操作时,可以通过使用Slick的Query API来构建查询语句。

要执行一个带有is null的左外连接(left outer join)并排除某些结果,可以使用Slick的filterjoinLeft方法来实现。下面是一个示例代码:

代码语言:txt
复制
import slick.jdbc.MySQLProfile.api._

// 定义表结构
class TableA(tag: Tag) extends Table[(Int, Option[String])](tag, "table_a") {
  def id = column[Int]("id", O.PrimaryKey)
  def name = column[Option[String]]("name")
  def * = (id, name)
}

class TableB(tag: Tag) extends Table[(Int, Option[String])](tag, "table_b") {
  def id = column[Int]("id", O.PrimaryKey)
  def name = column[Option[String]]("name")
  def * = (id, name)
}

// 创建表对象
val tableA = TableQuery[TableA]
val tableB = TableQuery[TableB]

// 执行查询
val query = for {
  (a, b) <- tableA joinLeft tableB on (_.id === _.id) if b.map(_.name).isDefined
} yield (a, b)

val result = db.run(query.result)

上述代码中,我们定义了两个表TableATableB,并创建了对应的表对象tableAtableB。然后,我们使用joinLeft方法进行左外连接,并使用filter方法过滤掉TableBname字段为null的结果。最后,通过db.run方法执行查询并获取结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

细谈Slick(5)- 学习体会和将来实际应用一些想法

回顾我学习Slick目的,产生了许多想法,觉着应该从实际工作应用角度把我对Slick目前能够达到目的以及在现有功能优势和特点下如何进一步改进才能正真符合IT系统对数据库程序编程和运行效率要求。...首先谈谈Slick特点:主体方面Slick为函数式编程模式带来了SQL编程,可以把数据库表当作scala语言中集合来对待。...除了能实现FP函数组合又避免了嵌入SQL语句式数据库编程,而且也实现了类型安全(type safe),可以由编译器(compiler)在编译时来捕捉语法错误。...我们也可以用SlickQuery函数组件(combinator)join来达到同样目的,如下: 1 val q14 = for { 2 (c,s) <- coffees join suppliers...是了,Slick把jdbcresultset隐藏起来了。其目的可以理解:这样可以实现语法安全(type safety),才能把SQL编程融入FP编程,即scala集合编程。

1.3K80

FunDA(2)- Streaming Data Operation:流式数据操作

类型就是SlickDBIO[T]了: 1 package com.bayakala.funda.rowtypes 2 import slick.dbio._ 3 object ActionType...{ 4 type FDAAction[T] = DBIO[T] 5 } 记得有一次在一个Scala讨论区里遇到这样一个问题:如何把a表里status字段更新成b表status字段值,转化成SQL...语句如下:  update a,b set a.status=b.status where a.id=b.id 那位哥们问题是如何Slick来实现对a表更新,不能用sql"???"...如果用FunDA流式操作思路就会很容易解决了,只要用join Query把b.status读出来再用b.id=a.id逐个更新a.status。...先用下面这段代码来设置测试数据: 1 import slick.dbio.DBIO 2 import slick.driver.H2Driver.api._ 3 4 import scala.concurrent.duration

1.3K60

SparkSql 中外连接查询中谓词下推规则

连接查询和连接条件 连接查询(outter join),分为连接查询、右连接查询以及全连接查询,全连接使用场景不多,所以本文重点讨论连接查询和右连接查询。...1行在右表中能找到相等id,但是id为1,是不满足第二个join条件(LT.id>1),所以左表这一条相当于没有和右表join上,所以左表值value保留,而右表value为null(你没满足...然后表再和右表进行连接,流程如下: 第一步:表id为1行在右表中没有,此时表值保留,右表为null 第二步:表id位2行在右表中有,并且RT.id大于1,两个join条件都满足,则表和右表值都保留...那么如果不下推(为了得到正确结果),来看看结果,流程如下: 第一步:表id为1行在右表中有,但是不满足第二个join条件,所以这行算是没join上,所以左表数据保留,右表为null 第二步:表id...,表右表都不保留,要跟上边join上,右表值为null情况区别开,这也是关键所在) 第二步:表id为2行和右表id为2join上了,同时也满足RT.id>1where条件。

1.7K90

经典SQL语句大全之基础

B: EXCEPT 运算符 EXCEPT运算符通过包括所有在 TABLE1 中但不在 TABLE2 中行并消除所有重复行而派生出一个结果表。...注:使用运算词几个查询结果行必须是一致。 12、说明:使用连接 A、left (outer) join连接(连接):结果集几包括连接表匹配行,也包括连接表所有行。...SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right (outer) join: 右连接...C:full/cross (outer) join: 全连接:不仅包括符号连接表匹配行,还包括两个连接表中所有记录。...统计函数中字段,不能和普通字段放在一起; 14、对数据库进行操作: 分离数据库: sp_detach_db;附加数据库:sp_attach_db 后接表明,附加需要完整路径名 15.如何修改数据库名称

99110

一些sql

B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中行并消除所有重复行而派生出一个结果表。...http://hovertree.com/menu/sql/ 12、说明:使用连接 A、left (outer) join连接(连接):结果集几包括连接表匹配行,也包括连接表所有行...SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right (outer) join: 右连接...C:full/cross (outer) join: 全连接:不仅包括符号连接表匹配行,还包括两个连接表中所有记录。...统计函数中字段,不能和普通字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整路径名 14.如何修改数据库名称

63920

(数据科学学习手册28)SQL server 2012中查询语句汇总

如果是则返回true,否则返回false; USE practice GO -- 插入一行带有空值样本 INSERT INTO T VALUES(NULL,NULL,NULL,NULL,'川菜',100,230...JOIN)、连接(OUTER JOIN);ON子句指定连接条件,它由被连接表中列和比较运算符、逻辑运算等构成。...  在内连接操作中,只有满足连接条件记录才能作为结果输出,但有时我们希望看到额外不满足条件数据,这时候可以使用连接(OUTER JOIN)查询来实现:   连接有三种形式:   1.连接...(LEFT OUTER JOIN)     连接结果集中将包含左边表所有记录(不管右边表中是否存在满足条件记录),以及右边表中满足连接条件所有记录   2.右连接(RIGHT OUTER...JOIN)     与连接正好相反   3.全连接(FULL OUTER JOIN)     连接与右连接并集 /* 使用连接方式查询在table1和table2中菜系均为自助餐记录

6.2K120

图解数据库内连接、连接、连接、右连接、全连接等

连接(连接) 关键字:left join on / left outer join on 语句: select * from a_table a left join b_table bon...说明: left join 是left outer join简写,它全称是连接,是连接中一种。...()连接,表(a_table)记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件记录。右表记录不足地方均为NULL。 ?...说明: right join是right outer join简写,它全称是右连接,是连接中一种。...与()连接相反,右()连接,表(a_table)只会显示符合搜索条件记录,而右表(b_table)记录将会全部表示出来。表记录不足地方均为NULL。 ?

5.5K52

MySQL常用SQL语句:插入更新删除查询

连接:分为连接,右连接 ,全连接 连接 以JOIN关键字左边表为基准,没有匹配记录则置NULL。...left join 表c on 表A字段 = 表cid 右连接 以JOIN关键字右边表为基准,没有匹配记录则置NULL。...sc.sno 全连接 以JOIN关键字左右两边表为基准,没有匹配记录则置NULL。...mysql不支持full join,但可以通过连接 + union + 右连接来实现(left join + union(可去除重复数据)+ right join) #select * from...自然连接(使用nature join) 自然连接就是USING子句简化版,它找出两个表中相同列作为连接条件进行连接。有自然连接,右自然连接和普通自然连接之分。

6K30

什么是内连接、连接?MySQL支持哪些连接?_oracle内连接和连接区别

连接 分为连接,右连接 连接 left join 语句: select 表1查询字段,表2查询字段 from 表1 left join 表2 on 条件; // 只改变了连接语句...是left outer join简写,它全称是连接,是连接中一种。...()连接,表(a_table)记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件记录。右表记录不足地方均为NULL。...是right outer join简写,它全称是右连接,是连接中一种。...与()连接相反,右()连接,表(a_table)只会显示符合搜索条件记录,而右表(b_table)记录将会全部表示出来。表记录不足地方均为NULL

89120

深入理解SQL四种连接-连接、右连接、内连接、全连接

如果右表某行在表中没有匹配行,则将为表返回空值。        3)FULL  JOIN 或 FULL OUTER JOIN 完整外部联接返回表和右表中所有行。...连接分三类:连接(LEFT OUTER JOIN)、右连接(RIGHT OUTER JOIN)和全连接(FULL OUTER JOIN)。...全连接实际是上连接和右连接数学合集(去掉重复),即“全= UNION 右”。 说明:表就是在“(LEFT OUTER JOIN)”关键字左边表。右表当然就是右边了。...但是可以通过和右求合集来获取全连接查询结果。下图是上面SQL在Oracle下执行结果: 语句10:和右合集,实际上查询结果和语句9是相同。...语句11:联合查询(UNION JOIN)例句,还没有找到能执行SQL环境。

5.6K10

高效sql性能优化极简教程

(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同主键。) 一、连接 连接可分为:连接、右连接、完全连接。...连接包含left join表所有行,如果表中某行在右表没有匹配,则结果中对应行右表部分全部为空(NULL). 注:此时我们不能说结果行数等于左表数据行数。...右连接包含right join右表所有行,如果表中某行在右表没有匹配,则结果中对应部分全部为空(NULL)。 注:同样此时我们不能说结果行数等于右表行数。...完全连接包含full join左右两表中所有的行,如果右表中某行在表中没有匹配,则结果中对应行右表部分全部为空(NULL),如果表中某行在右表中没有匹配,则结果中对应行部分全部为空(NULL...排序是一种昂贵操作,在一秒钟执行成千上万次sql语句中,如果带有排序操作,往往会消耗大量系统资源,性能低下。索引是一种有序结果,如果order by后面的字段上建有索引,将会大大提升效率!

3.3K50

Apache-Flink深度解析-JOIN 算子

NULL; FULL -  返回表和右表并集,不存在一边补NULL; SELF JOIN - 自连接,将表查询时候命名不同别名。...: filter push down project push down 如上优化规则以filter push down 为例,示意优化器对执行plan优化变动: LEFT OUTER JOIN 外联接语义是返回表所有行...|  NULL | +------+------+------+-------+ 1 row in set (0.00 sec) 上面查询执行逻辑上也是分成两步: 第一步:外联接查询 mysql&...FULL OUTER JOIN链接语义返回表和右表并集,不存在一边补NULL,用于演示MySQL数据库不支持FULL OUTER JOIN。这里不做演示了。...JOIN key P001进行JOIN事件)需要撤回左边下发NULL记录,并下发JOIN完整(带有右边事件列)事件到下游。

5.5K31

学习SQLite之路(三)

LEFT、RIGHT、FULL,但 SQLite 只支持 连接(LEFT OUTER JOIN)。...一旦主连接计算完成,连接(OUTER JOIN)将从一个或两个表中任何未连接行合并进来,连接列使用 NULL 值,将它们附加到结果表中。...(7)比较:(不知道这样算不算正确,我也不是理解太深刻) 交叉连接后结果非常多,慎用 连接会填充NULL,内连接不会 4, SQLite Unions子句:用于合并两个或多个 SELECT 语句结果...SQLite NULL值: SQLite NULL 是用来表示一个缺失值项。表中一个 NULL 值是在字段中显示为空白一个值。 带有 NULL字段是一个不带有字段。...NULL 值与零值或包含空格字段是不同,理解这点是非常重要。 (1)带有 NULL字段在记录创建时候可以保留为空。

3K70

SQL命令 JOIN(一)

指定隐式联接以执行表与另一个表中字段外联接;指定显式联接以联接两个表。这种隐式联接语法可以很好地替代显式联接语法,或者与显式联接语法一起出现在同一查询中。...LEFT OUTER JOIN连接相同。箭头语法(->)还执行外部联接。 RIGHT OUTER JOIN 与右连接相同。 FULL OUTER JOIN 与FULL JOIN相同。...对于RIGHT OUTER JOIN,指定第二个表是连接源表。 FULL OUTER JOIN是将在两个表上执行OUTER JOIN和右OUTER JOIN结果组合在一起连接。...FULL JOIN不能以NATURAL关键字作为前缀。 尝试这样做会导致SQLCODE -94错误。 ON 子句 内连接、连接、右连接或全连接都可以有ON子句。...除非用括号分组,否则使用相同逻辑运算符谓词严格按照从左到右顺序执行。 ON子句有以下限制: 带有ON子句连接只能使用ANSI连接关键字语法。

2.2K20

10 分钟,带你彻底掌握 SQL 多表查询(建议收藏)

前言 多表查询,也称为多表连接查询;作为关系型数据库最主要查询方式,在日常工作中被广泛使用 常见多表查询操作包含:子查询、内连接、连接、右连接、完全连接、交叉连接 本篇文章将利用一个实例逐一介绍这些操作...,如果内连接没有通过 on 关键字指定条件的话,查询结果和交叉连接查询结果一样,只是执行效率高于交叉连接 3.3 连接 连接包含: 连接 右连接 其中, 连接:使用关键字 left join...,以左表为准,返回所有数据,右表满足 on 条件数据会全部显示,否则用 null 值去填充 右连接:和连接相反。...使用关键 right join,以右表为准,返回右表所有数据,表满足 on 条件数据会全部显示,否则用 null 值去填充 首先,我们来看连接实例 # 连接 select * from...,NULL,2021008,音乐,10,2021-01-18 15:36:00 3.4 完全连接 完全连接,是通过关键字 full join 连接两张表,返回表和右表所有数据,并使用 null 值填充缺失数据

85510

SQL 多表联合查询几种方式

连接分为连接、右链接、全连接三种。 连接 返回表中所有行,如果表中行在右表中没有匹配行,则在相关联结果集中右表所选择字段均为NULL。...右表中没有的补为NULL on条件中如果有对限制条件,无论条件真假,依然返回所有行,但是会影响右表匹配值。...右连接 返回右表中所有行,如果右表中行在表中没有匹配行,则在表中相关字段返回NULL值。...JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber 全连接/完全连接 返回两个连接中所有的记录数据,是连接和右连接并集。...CROSS JOIN PM_ACT_RLS 注意:带有where条件子句,往往会先生成两个表行数乘积数据表,然后从根据where条件从中选择。

73620

MySQL数据篇之多表操作-----保姆级教程

--返回两张表都满足条件部分记录 多表查询之外连接 连接 注意 右连接 注意 小总结 可以在update语句中使用inner join和left join 在delet语句中使用join语句...where did=2; 向刚才做这两个操作(插入一个没有部门员工和删除一个带有员工部门),这种情况都是不应该发生。...,但是数据都为null 这样对应数据全部通过on条件匹配完成之后,就会生成一张临时表,这个临时表中包含字段就是select那些字段,值来源于左表和右表 如果LEFT JOIN查询有where...不能匹配上当前这行右表数据,这行表数据就全是null RIGHT JOIN和where使用,与LEFT JOIN基本相同 1.根据on条件构建临时表,只是这时候临时表一行数据中,右表数据必须存在...,数据按照on条件与当前行右表数据匹配,匹配上就展示表数据,匹配不上表数据就是null

1.2K10
领券