从表保存了主表的id,以分号分隔,怎么样用一条sql搞定主表满足条件的查询? 不希望单独写存储过程,或者后台拆成int后传进来,就一条sql 搞定,一条

问题描述:在数据库的从表里边用;号保存了主表的id,主表id 整型,从表字段string类型,希望写一条sql 查询出主表里边满足条件的数据,不希望通过写独立的存储过程或者后台代码把id 拆开后再查,就一条sql 解决所有问题,终于找到解决办法。

主表数据:

从表数据:

1. 在sql数据库建立SplitStringToTable函数

 1 USE [AutoRent]
 2 GO
 3
 4 /****** Object:  UserDefinedFunction [dbo].[SplitStringToTable]    Script Date: 08/11/2015 15:07:18 ******/
 5 IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[SplitStringToTable]‘) AND type in (N‘FN‘, N‘IF‘, N‘TF‘, N‘FS‘, N‘FT‘))
 6 DROP FUNCTION [dbo].[SplitStringToTable]
 7 GO
 8
 9 USE [AutoRent]
10 GO
11
12 /****** Object:  UserDefinedFunction [dbo].[SplitStringToTable]    Script Date: 08/11/2015 15:07:18 ******/
13 SET ANSI_NULLS ON
14 GO
15
16 SET QUOTED_IDENTIFIER ON
17 GO
18
19 CREATE  FUNCTION  [dbo].[SplitStringToTable]
20 (
21      @String  nvarchar(4000),  --格式如:“1,2,3,4,”
22      @SplitChar  nvarchar(10)  --分割的字符:“,”
23 )
24 RETURNS    @table  Table(ID  varchar(100))
25 AS
26 BEGIN
27    DECLARE  @Index  INT
28    SET  @Index  =  0
29
30         IF @String <> ‘‘
31         Begin
32             IF RIGHT(@String,1)<> @SplitChar
33                 SET @String = @String + @SplitChar
34             IF LEFT(@String,1)= @SplitChar
35             SET @String = STUFF(@String, 1, 1, ‘‘)
36         End
37
38        WHILE  CHARINDEX(@SplitChar,@String,@Index)  >  0
39        BEGIN
40            INSERT INTO @table(ID)
41                VALUES (SUBSTRING(@String, @Index, CHARINDEX(@SplitChar, @String,
42                 @Index) - @Index))
43                SET @index = CHARINDEX(@SplitChar, @String, @Index) + 1 END
44 RETURN
45 END
46
47 GO2  利用函数编程查询语句
1   SELECT  * FROM TB_ProtocolCustomer WHERE ProtocolCustomerID IN (select  b.id
2    FROM  TB_ProtocolCustomerattach a
3    cross apply dbo.SplitStringToTable(a.attachpcustomer,‘;‘)  as b
4    WHERE a.pcustomer=7795)

3 就此问题搞定


				
时间: 2024-10-24 14:13:54

从表保存了主表的id,以分号分隔,怎么样用一条sql搞定主表满足条件的查询? 不希望单独写存储过程,或者后台拆成int后传进来,就一条sql 搞定,一条的相关文章

解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题

https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id 1 2 3 4 现在删除4,就变成了 1 2 3 这时候,如果增加一条数据,会变成 1 2 3 5 上面5不是我们想要的结果,4才是理想的id,解决方法是,在删除4之后,执行下面的sql语句: ALTER TABLE table_name AUTO_INCREMENT = 1; 原文地址:http

一张表保存一个无限级树形目录

一张表保存一个无限级树形目录: /****** Object: Table [dbo].[TreeMenue] Script Date: 08/20/2014 18:03:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[TreeMenue]( [ID] [int] IDENTITY(1,1) NOT NULL, [MenueName] [v

c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集

界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: Html代码   <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="FPSZ.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

[转载]unix环境高级编程备忘:理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

转载自http://www.cnblogs.com/stemon/p/5287631.html 一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限.如果有,则ok,否则报错不能执行.在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但

hibernate分表保存日志

@Service("accessLogService")@Transactionalpublic class LogMessageServiceImpl extends BaseDaoServiceImpl<AccessLogMessage,Long> implements LogMessageService{ @Autowired SplitHibernateInterceptor splitInter;  @Autowired public BaseDaoImpl<

提取数据表保存为XML文件

1 //连接数据库 2 SqlConnection con = new SqlConnection("server=****;database=****;uid=sa;pwd=********"); 3 4 /// <summary> 5 /// 提取数据表保存为XML文件 6 /// </summary> 7 /// <param name="sender"></param> 8 /// <param name

linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限.如果有,则ok,否则报错不能执行.在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但是如果A用户在某些场景中想要执行一些特权操作,能顺利的执行吗?上面说到了用户的任务操作,linu

linux cat命令使用方法详解--把档案串连接后传到基本输出

linux cat命令使用方法详解--把档案串连接后传到基本输出 日期:2011-12-05 点击:2324 来源: 未知 分享至: 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)参数:-n 或 --number 由 1 开始对所有输出的行数编号-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号-s 或 --squeeze-b

关于javaBean中boolean类型变量的set和get注入后传到前端JS中的问题

set和get方法如下: public boolean isLine() {        return isLine;    } public void setLine(boolean isLine) {        this.isLine = isLine;    } 这里的isLine变量名最好不要添加is后缀,改成line.否则在前端Js中引用isLine变量时始终是undefined,经发现,传到前端的变量值名字是line,而不是isLine. 关于javaBean中boolean类