【问题标题】:select from table where condition like %{list of values}%从表中选择条件如 %{list of values}%
【发布时间】:2020-10-22 08:56:09
【问题描述】:

我想获取表中的所有行,其中“评论”列可以包含另一个表的值:

表 T1 中的行名称包含名称列表。

表T2中的行注释复合字符串,注释中可以嵌入一个名称。

我尝试执行下一个PLSQL代码:

BEGIN

SET @SearchCriteria = (SELECT * FROM names);
    
SET @SearchCriteria = '%' + @SearchCriteria + '%';
    
SELECT * FROM ticket WHERE comment LIKE @SearchCriteria;

END

但它返回:子查询返回多于 1 行

另外,我执行了以下过程,但没有得到任何结果:

BEGIN 
DECLARE nm VARCHAR(16);
DECLARE cur1 CURSOR FOR SELECT nm FROM names;

OPEN cur1;
   
   read_loop: LOOP
    FETCH cur1 INTO nm;
    set @name = '%'+nm+'%';
  
    SELECT * FROM ticket WHERE comment LIKE @name;
    
   END LOOP;
   CLOSE cur1; 
END

之前的代码需要很长时间才能得到结果,所以我在 phpmyadmin.conf 中更改了 max_execution_time 的值。

MYSQL 版本:5.6.17

我怎样才能得到正确的结果?

【问题讨论】:

  • 这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: mysql join select stored-procedures subquery


【解决方案1】:

你可以用一个查询来做到这一点:

select t.*
from ticket t
where exists (
    select 1
    from names n
    where t.comment like concat('%', n.nm, '%')
)

这会带来表 ticket 中的所有行,其 comment 包含可在表 names 中找到的 nm

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2011-08-16
    • 2018-02-09
    • 2015-02-24
    • 2022-12-02
    相关资源
    最近更新 更多