是什么让值再次出现在结果集中?它们的名称是如何被空值替换的?

qf9go6mv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(360)

下面是指向数据库的实体关系图的链接。
https://ibb.co/knpsfe
这是我感兴趣的声明。这本书取名为《艾伦·博利欧学习sql》。它可以在177页上找到,如果你想在那里读的话。这个查询的主题是“子查询作为表达式生成器”。

如您所见,结果集包含三个“null”行。它们被认为是由第一个子查询的where子句排序的:

AND p.product_type_cd = 'ACCOUNT'

以下是这本书的摘录:
结果集中多出三行的原因是查询的早期版本包含了筛选条件 p.product_type_cd = 'ACCOUNT' . 这个过滤器消除了带有保险和贷款产品类型的行,例如小企业贷款。
由于此版本的查询不包含到product表的联接,因此无法在主查询中包含筛选条件。针对产品表的相关子查询确实包含此筛选器,但唯一的效果是将产品名称保留为空。
这是“以前版本的查询”:

针对产品表的相关子查询确实包含此筛选器,但唯一的效果是将产品名称保留为空。
它是怎么做到的?评估的顺序是什么?
查询

返回第一列“产品”,列出保险和贷款产品类型。是什么使它们再次出现在结果集中?它们的名称是如何被空值替换的?

bqjvbblv

bqjvbblv1#

两个查询的结果顺序相同。这种情况下的主要区别是,它们在第二个查询中使用了内部联接,而不是在第一个查询中。
内部连接仅在结果不同于null时强制执行查询。
我认为,要使它显示相同的结果,只需将内部连接更改为左连接。

相关问题