请教一下sql的like能否跟结果集

qq_35942707 2016-09-27 11:19:57
整条查询代码如下
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
AND Name LIKE
(SELECT '%'+convert(varchar(200), tagName)+'%'
FROM MT_News_Tag
WHERE NewsId = 732786
AND tableName = 'News_Report' )
ORDER BY Sort DESC ,ID DESC



     (SELECT '%'+convert(varchar(200), tagName)+'%'
FROM MT_News_Tag
WHERE NewsId = 732786
AND tableName = 'News_Report' )


这条的查询结果是


但是这样会报错,实现不了这个需求,

消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。


请教下各位高手,如果想实现这个需求,有没有办法能解决!
...全文
531 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
闭包客 2016-09-27
  • 打赏
  • 举报
回复
用 charindex 代替 like
qq_35942707 2016-09-27
  • 打赏
  • 举报
回复
问题解决了,这样可以实现需求!
SELECT TOP (6) a.*
FROM V_MT_ProductsInfo a
JOIN
(
    SELECT  tagName AS NAME
    FROM MT_News_Tag
    WHERE NewsId = 732786
        AND tableName = 'News_Report'
)b ON charindex(b.NAME,a.NAME)>0
WHERE a.IsShow>0
ORDER BY  a.Sort DESC ,a.ID DESC 
yzf86211861 2016-09-27
  • 打赏
  • 举报
回复
去数据库 板块 发个帖子吧 那边SQL 高手比较多
一枚大帅哥 2016-09-27
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
我觉得比较简单的做法是创建一个存储过程,
create proc myTest
as
begin
declare @str nvarchar(1000)='select * from V_MT_ProductsInfo where 1=1 '
declare @strCondition nvarchar(1000)=''
set @strCondition=(select ' or name like '''+convert(varchar(200), tagName)+''' ' from MT_News_Tag where NewsId = 732786
            AND tableName = 'News_Report' for xml path(''))
exec (@str+@strCondition)
end
C# 就是一般的DataTable dt=GetDT("exec myTest") 大致这样
大神的回答值得一试
一枚大帅哥 2016-09-27
  • 打赏
  • 举报
回复
最优的方案是把逻辑写在编程语言里! 如果非得用SQL的话,这个问题估计要解决得用游标了。 但是SQL不建议用游标,数据量大时效率会非常非常低,实在是最无奈的解决方法。
正怒月神 版主 2016-09-27
  • 打赏
  • 举报
回复
我觉得比较简单的做法是创建一个存储过程,
create proc myTest
as
begin
declare @str nvarchar(1000)='select * from V_MT_ProductsInfo where 1=1 '
declare @strCondition nvarchar(1000)=''
set @strCondition=(select ' or name like '''+convert(varchar(200), tagName)+''' ' from MT_News_Tag where NewsId = 732786
            AND tableName = 'News_Report' for xml path(''))
exec (@str+@strCondition)
end
C# 就是一般的DataTable dt=GetDT("exec myTest") 大致这样
qq_35942707 2016-09-27
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
[quote=引用 5 楼 qq_35942707 的回复:] [quote=引用 4 楼 starfd 的回复:] like后面只能有一个值,你这个查询结果明显有一堆值,你应该是要改成下面这种sql吧
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
        AND exists
    (SELECT 1
    FROM MT_News_Tag
    WHERE NewsId = 732786
            AND tableName = 'News_Report'
And charindex(tagName,Name)>0 )
ORDER BY  Sort DESC ,ID DESC
嗯 top 1是可以的,但是需求是想哪个查询的结果集都匹配,不知道sql能否实现[/quote] 你可以试下我写的sql啊……[/quote] 测试了下,匹配的结果都是电动球阀的Name数据,只匹配了那个结果集的第一个数据
  • 打赏
  • 举报
回复
引用 5 楼 qq_35942707 的回复:
[quote=引用 4 楼 starfd 的回复:] like后面只能有一个值,你这个查询结果明显有一堆值,你应该是要改成下面这种sql吧
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
        AND exists
    (SELECT 1
    FROM MT_News_Tag
    WHERE NewsId = 732786
            AND tableName = 'News_Report'
And charindex(tagName,Name)>0 )
ORDER BY  Sort DESC ,ID DESC
嗯 top 1是可以的,但是需求是想哪个查询的结果集都匹配,不知道sql能否实现[/quote] 你可以试下我写的sql啊……
qq_35942707 2016-09-27
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
like后面只能有一个值,你这个查询结果明显有一堆值,你应该是要改成下面这种sql吧
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
        AND exists
    (SELECT 1
    FROM MT_News_Tag
    WHERE NewsId = 732786
            AND tableName = 'News_Report'
And charindex(tagName,Name)>0 )
ORDER BY  Sort DESC ,ID DESC
嗯 top 1是可以的,但是需求是想哪个查询的结果集都匹配,不知道sql能否实现
  • 打赏
  • 举报
回复
like后面只能有一个值,你这个查询结果明显有一堆值,你应该是要改成下面这种sql吧
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
        AND exists
    (SELECT 1
    FROM MT_News_Tag
    WHERE NewsId = 732786
            AND tableName = 'News_Report'
And charindex(tagName,Name)>0 )
ORDER BY  Sort DESC ,ID DESC
qq_35942707 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 closurer 的回复:
用 charindex 代替 like
SELECT TOP (6) *
FROM V_MT_ProductsInfo
WHERE IsShow>0
        AND charindex(
    (SELECT  tagName
    FROM MT_News_Tag
    WHERE NewsId = 732786
            AND tableName = 'News_Report' ),Name)>0
也是不行,依然报那个错误
qq_35942707 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 closurer 的回复:
用 charindex 代替 like
能不能给一个例子呢

62,272

社区成员

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

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

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

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