Sql Server中Cross Apply关键字的使用

这篇具有很好参考价值的文章主要介绍了Sql Server中Cross Apply关键字的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Sql Server中Cross Apply关键字的使用

前言

在写一个业务的时候,有1列数据如下:

车牌号
湘A00001/湘G00001
湘A00002/湘G00002
湘A00003/湘G00003/湘A8888888
湘A00004/湘G00004/湘A00001

我的查询条件也是车牌号,我会传入如下参数:

@PLATE_NO '湘A00003/湘G00003/湘A8888888'

我需要判断我传入的车牌号是否包含上面的列数据,举例上面的表为B表,那么B表列中的车牌号,我的PLATE_NO参数需要包含里面所有的车牌号。

一个简单的包含关系,我会用拆分函数去拆分我传入的参数,然后去比对参数是否包含B表的车牌号。对于参数处理很简单,但是B表的多行,那么该如何去处理B表的列呢?

Cross Apply介绍

在 SQL Server 中,Cross Apply 关键字主要用于从一个表中获取数据,并对每一行数据应用一个表值函数,然后返回函数的结果。这个关键字允许你在右侧的表达式中引用左侧表的列。

Cross Apply 和 Inner Join 类似,只返回匹配的记录。如果没有匹配的记录,那么就不会返回任何结果。

思路

首先肯定需要通过‘/’拆分获得车牌号数据,将湘A00003/湘G00003/湘A8888888变成如下格式

col
湘A00003
湘G00003
湘A8888888

那么B表该如何去实现,它有多行数据,多行数据如何拆分成一列。

代码实现

首先我们需要有一个表值函数来拆分字符串:

CREATE FUNCTION dbo.SplitString
(
    @List NVARCHAR(MAX),
    @Delim NVARCHAR(255)
)
RETURNS TABLE
AS
RETURN 
(
    SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
    FROM 
    ( 
        SELECT x = CONVERT(XML, '<i>' 
        + REPLACE(@List, @Delim, '</i><i>') 
        + '</i>').query('.')
    ) AS a CROSS APPLY x.nodes('i') AS y(i)
);

实现方式很多,我这里直接让GPT生成了一个,执行上述代码即可完成拆分函数创建,调用如下:

SELECT Item FROM dbo.SplitString('湘A00003/湘G00003/湘A8888888', '/');

对于B表的操作,就需要使用到Cross Apply关键字了,我对每一行数据车票号进行拆分操作,然后将数据存于临时表,并去重处理。

SELECT DISTINCT
split.col
INTO #TEMP
FROM B
CROSS APPLY dbo.SplitString(车牌号, '/') AS split;

拆分结果如下

col
湘A00001
湘G00001
湘A00002
...

然后在进行比对查询

将参数存放在TEMP01临时表,将B表拆分的数据存于TEMP02临时表,然后使用CASE WHENTEMP02为主表判断TEMP01列是否存在与02中,不能存在则新建一列赋值为0

SELECT 
P.Item,
CASE
WHEN EXISTS
(
SELECT 1 FROM TEMP01 WHERE Item = P.Item
)          THEN
    1
ELSE
    0 
END AS ISBOOL
FROM TEMP02 P

结果如下,这里只是举例子,主要是体现Cross Apply的作用。

Sql Server中Cross Apply关键字的使用

Sql Server中Cross Apply关键字的使用

总结

简单来说 Cross Apply 看作是 SQL Server 中的一个"循环"操作。对于你在左边的表中的每一行数据,Cross Apply 都会执行一次右边的查询。我上述的操作就是多列数据使用实现Cross Apply循环拆分每行数据的车牌号列。文章来源地址https://www.toymoban.com/news/detail-749812.html

到了这里,关于Sql Server中Cross Apply关键字的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL ORDER BY 关键字

    ORDER BY 用于对结果集进行排序。 ORDER BY 用于对结果集按照一个列或者多个列进行排序。 ORDER BY 默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 。 ORDER BY 子句后面的列名指示按哪些列进行排序。如果您指定多个列

    2024年02月16日
    浏览(47)
  • sql中的explain关键字用法

    在SQL中,使用 EXPLAIN 可以获取查询的执行计划,以便进行性能优化和查询调优。执行计划提供了关于查询操作的详细信息,涵盖了多个表头字段,每个字段都提供了特定的信息。以下是explain表头字段解释: id :每个操作的唯一标识符。这个字段通常是一个递增的整数

    2024年01月18日
    浏览(45)
  • 【SQL】SQL的基础知识-语法、关键字、函数

    SQL(Structured Query Language)是一种用于管理关系数据库管理系统(RDBMS)的语言。在本文中,我们将讨论SQL的基础知识,包括语法、和函数。 SQL语法由多个和操作符组成,用于完成对数据的操作。以下是SQL的基础语法: 其中, SELECT 用于选择要查询的列,

    2024年02月06日
    浏览(55)
  • SQL语句——DESC关键字,降序练习

    学习 1、DESC是descend下降的缩写,降序,只要放在需要降序的字段前面就可以了, 2、对多个字段执行降序排列的话就是字段名+DESC以逗号隔开再字段名+DESC.....最后以分号结尾 3、select xxx(字段) from xxx(表) where (条件xxxx) ,排序、分组操作都是在where条件之后的,查询xxxx字段从

    2024年02月16日
    浏览(42)
  • 数据库--SQL关键字的执行顺序

    数据库-- 数据类型 : http://t.csdn.cn/RtqMD 数据库-- 三大范式、多表查询、函数sql: http://t.csdn.cn/udJSG 数据库-- MySQL增删改查: http://t.csdn.cn/xkiti select   from   join   where   group by   having   order by   聚合函数   limit   top  以及逻辑运算符not  and    or    一: 语法顺序    

    2024年02月12日
    浏览(52)
  • SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

    SQL RIGHT JOIN返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为0条记录。 注意:在某些数据库中,RIGHT JOIN被称为RIGHT OUTER JOIN。 在本教程中,我们将使用著名的Northwind示例数据库。 以下是“Orders”表的部分选择: OrderID C

    2024年02月05日
    浏览(54)
  • Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字

    报错提示: Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 本人分析:未找到from,说明from前的sql语句格式有问题(并不一定是缺少from这个或者from拼写错误)。 举个代码报错的例子: 正确的sql语句: select \\\'123‘ XX ’123\\\' from dual; 错误

    2024年02月11日
    浏览(32)
  • MySQL java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 关键字异常处理

    使用mybatis插入数据时出现java.sql.SQLSyntaxErrorException异常 收到错误“由:java.sql.SQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,了解在第14行的“”附近使用的正确语法。 liquibase回答: You have an error in your SQL syntax; check the manual that corresponds to

    2024年02月15日
    浏览(50)
  • 【C++100个关键字使用介绍】

    C++ 中的是用于表示语言中预先定义好的、具有特殊意义的单词。这些不能用作变量名、函数名或任何其他标识符名称。尽管目前 C++ 没有一百个,但是 C++11、C++14、C++17 和 C++20 的标准中持续增加了一些。 以下是 C++ 中一些的列表和简短说明,

    2024年01月21日
    浏览(46)
  • 使用VSCode在文件中查找关键字

    在使用VSCode编辑器时,经常需要在文件中查找特定的或文本。VSCode提供了强大的搜索功能,可以帮助我们快速定位并找到所需的内容。本文将介绍如何在VSCode中进行搜索。 在VSCode中查找的方法如下: 打开目标文件:首先,打开你想要在其中进行搜

    2024年02月04日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包