求一个sql语句

耗子哭死猫 2014-01-16 11:52:09
table1 表 字段 Tid Tname
table2 表 字段 Fid food Tid

table2 表 Tid 存入的是table1 表Tid 格式是: 1|5|7|9 存放了多个Tid,用|分隔了。

现在想建个视图怎么把FID food Tname 关联起来, 这个存放多个TID没法直接 table2.Tid=table1.Tid
...全文
343 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-01-16
  • 打赏
  • 举报
回复
"'" + Tid + "'" Like '%|'+ cast(tid as nvarchar) +'|%'
md5e 2014-01-16
  • 打赏
  • 举报
回复
|1|5|7|9| like '%|'+ cast(tid as nvarchar) +'|%'
风吹腚腚凉 2014-01-16
  • 打赏
  • 举报
回复
引用 14 楼 liuchaolin 的回复:
[quote=引用 12 楼 yuyanxing09 的回复:] [quote=引用 11 楼 liuchaolin 的回复:] 如果table2.Tid是text|ntext,是不能用=做比较的,也不能用加法运算 where 1=1 and ( table2.Tid like cast(table1.Tid as nvarchar(10)) //比较只有51的情况下 or table2.Tid like cast(table1.Tid as nvarchar(10) +'|%' //比较51在第一位的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) +'|%' //比较51在中间的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) //比较51在尾部的情况下 ) 还有一种就是开启全文索引,不是所有网络空间都有
//比较51在尾部的情况下 63|511 会把511也模糊查询出来。不知道你明白我说的没[/quote] 应该不会的,你自己可以测试一下 Select 1 From 随便一个表 WHere '54|511' like '%51' Select 1 From 随便一个表 WHere '54|511' like '%511'[/quote] 哦哦是我看错了,没错。sorry
md5e 2014-01-16
  • 打赏
  • 举报
回复
你从第二个条件开始都没有正确
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 17 楼 liuchaolin 的回复:
你确定你的条件写对了? [quote=引用 16 楼 yuyanxing09 的回复:] [quote=引用 15 楼 liuchaolin 的回复:] 还用500才是3位数,应该不会有超过10位的,不行就20咧
 select t.FaultType from 
(select * from Posss_FaultReport where not CheckDate is  NULL) as t  where t.FaultType ='51' or 
t.FaultType like '%|'+ cast(51 as  nvarchar(10))+ '%' or t.FaultType like '%'+ cast(51 as  nvarchar(10))+ '|%'
还是会出现41|78|79|251|451 不行呀。 没有别的方法了吗?[/quote][/quote] 恩,全写了。
 select t.FaultType from 
(select * from Posss_FaultReport where not CheckDate is  NULL) as t  where t.FaultType ='51' or 
t.FaultType like '%|'+ cast(51 as  nvarchar(10))+ '%' or t.FaultType like '%'+ cast(51 as  nvarchar(10))+ '|%' or 
t.FaultType like '%|'+ cast(51 as  nvarchar(10))+ '|%'
这是查询出的31|43|251|271
md5e 2014-01-16
  • 打赏
  • 举报
回复
你确定你的条件写对了?
引用 16 楼 yuyanxing09 的回复:
[quote=引用 15 楼 liuchaolin 的回复:] 还用500才是3位数,应该不会有超过10位的,不行就20咧
 select t.FaultType from 
(select * from Posss_FaultReport where not CheckDate is  NULL) as t  where t.FaultType ='51' or 
t.FaultType like '%|'+ cast(51 as  nvarchar(10))+ '%' or t.FaultType like '%'+ cast(51 as  nvarchar(10))+ '|%'
还是会出现41|78|79|251|451 不行呀。 没有别的方法了吗?[/quote]
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 15 楼 liuchaolin 的回复:
还用500才是3位数,应该不会有超过10位的,不行就20咧
 select t.FaultType from 
(select * from Posss_FaultReport where not CheckDate is  NULL) as t  where t.FaultType ='51' or 
t.FaultType like '%|'+ cast(51 as  nvarchar(10))+ '%' or t.FaultType like '%'+ cast(51 as  nvarchar(10))+ '|%'
还是会出现41|78|79|251|451 不行呀。 没有别的方法了吗?
md5e 2014-01-16
  • 打赏
  • 举报
回复
还用500才是3位数,应该不会有超过10位的,不行就20咧
md5e 2014-01-16
  • 打赏
  • 举报
回复
引用 12 楼 yuyanxing09 的回复:
[quote=引用 11 楼 liuchaolin 的回复:] 如果table2.Tid是text|ntext,是不能用=做比较的,也不能用加法运算 where 1=1 and ( table2.Tid like cast(table1.Tid as nvarchar(10)) //比较只有51的情况下 or table2.Tid like cast(table1.Tid as nvarchar(10) +'|%' //比较51在第一位的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) +'|%' //比较51在中间的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) //比较51在尾部的情况下 ) 还有一种就是开启全文索引,不是所有网络空间都有
//比较51在尾部的情况下 63|511 会把511也模糊查询出来。不知道你明白我说的没[/quote] 应该不会的,你自己可以测试一下 Select 1 From 随便一个表 WHere '54|511' like '%51' Select 1 From 随便一个表 WHere '54|511' like '%511'
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 11 楼 liuchaolin 的回复:
如果table2.Tid是text|ntext,是不能用=做比较的,也不能用加法运算 where 1=1 and ( table2.Tid like cast(table1.Tid as nvarchar(10)) //比较只有51的情况下 or table2.Tid like cast(table1.Tid as nvarchar(10) +'|%' //比较51在第一位的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) +'|%' //比较51在中间的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) //比较51在尾部的情况下 ) 还有一种就是开启全文索引,不是所有网络空间都有
哦,nvarchar(10) 是固定了, 但是我也不确定 查询的是几位数。万一是500出来了, 我也总不能老改 nvarchar(10)呀
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 11 楼 liuchaolin 的回复:
如果table2.Tid是text|ntext,是不能用=做比较的,也不能用加法运算 where 1=1 and ( table2.Tid like cast(table1.Tid as nvarchar(10)) //比较只有51的情况下 or table2.Tid like cast(table1.Tid as nvarchar(10) +'|%' //比较51在第一位的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) +'|%' //比较51在中间的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) //比较51在尾部的情况下 ) 还有一种就是开启全文索引,不是所有网络空间都有
//比较51在尾部的情况下 63|511 会把511也模糊查询出来。不知道你明白我说的没
md5e 2014-01-16
  • 打赏
  • 举报
回复
如果table2.Tid是text|ntext,是不能用=做比较的,也不能用加法运算 where 1=1 and ( table2.Tid like cast(table1.Tid as nvarchar(10)) //比较只有51的情况下 or table2.Tid like cast(table1.Tid as nvarchar(10) +'|%' //比较51在第一位的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) +'|%' //比较51在中间的情况下 or table2.Tid like '%|'+ cast(table1.Tid as nvarchar(10) //比较51在尾部的情况下 ) 还有一种就是开启全文索引,不是所有网络空间都有
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 8 楼 wjfwd2010 的回复:
[quote=引用 7 楼 liuchaolin 的回复:] 先将 51|54|52 ==> |51|54|52| 否则你就要多写三个like关联 and(like tid or like tid +'|%' or like '%|'+ tid +'|%' or like '%|'+ tid )
兄弟你怎么把自己绕糊涂了? 你的否则是错误的,至于为什么错误你自己想想吧例如 551|525对吧? 你一开始的想法挺对的。[/quote] +1
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 7 楼 liuchaolin 的回复:
先将 51|54|52 ==> |51|54|52| 否则你就要多写三个like关联 and(like tid or like tid +'|%' or like '%|'+ tid +'|%' or like '%|'+ tid )
or like '%|'+ tid 会模糊查询出63|511 额,头疼啊
风吹腚腚凉 2014-01-16
  • 打赏
  • 举报
回复
引用 7 楼 liuchaolin 的回复:
先将 51|54|52 ==> |51|54|52| 否则你就要多写三个like关联 and(like tid or like tid +'|%' or like '%|'+ tid +'|%' or like '%|'+ tid )
兄弟你怎么把自己绕糊涂了? 你的否则是错误的,至于为什么错误你自己想想吧例如 551|525对吧? 你一开始的想法挺对的。
md5e 2014-01-16
  • 打赏
  • 举报
回复
先将 51|54|52 ==> |51|54|52| 否则你就要多写三个like关联 and(like tid or like tid +'|%' or like '%|'+ tid +'|%' or like '%|'+ tid )
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
查询51 格式 51|54|52 也可能是52|51|54 还可能是52|54|51 或者是单独一个51 like '%|'+ cast(51 as nvarchar) +'|%'
引用 1 楼 liuchaolin 的回复:
|1|5|7|9| like '%|'+ cast(tid as nvarchar) +'|%'
查询51 格式 51|54|52 也可能是52|51|54 还可能是52|54|51 或者是单独一个51 like '%|'+ cast(51 as nvarchar) +'|%'
md5e 2014-01-16
  • 打赏
  • 举报
回复
引用 4 楼 yuyanxing09 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] |1|5|7|9| like '%|'+ cast(tid as nvarchar) +'|%'
如果Tid有 51|79 或者51 后面条件怎么加[/quote] 如果你是非text字段('|'+ tid +'|') like ,不过一般见意你在保存时,直接"|"+ tillist +"|"
耗子哭死猫 2014-01-16
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
|1|5|7|9| like '%|'+ cast(tid as nvarchar) +'|%'
如果Tid有 51|79 或者51 后面条件怎么加
风吹腚腚凉 2014-01-16
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
"'" + Tid + "'" Like '%|'+ cast(tid as nvarchar) +'|%'
2楼是错的1楼是对的,需要先给字符串前后加|

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧