Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL在WHERE子句中使用LIKE在子查询中搜索_Mysql_Sql_Subquery_Where Clause_Sql Like - Fatal编程技术网

MYSQL在WHERE子句中使用LIKE在子查询中搜索

MYSQL在WHERE子句中使用LIKE在子查询中搜索,mysql,sql,subquery,where-clause,sql-like,Mysql,Sql,Subquery,Where Clause,Sql Like,如何使用“LIKE”在子查询中搜索 我试过这样做,但不起作用: SELECT * FROM mytable WHERE name LIKE '% (SELECT name FROM myothertable) %' 到目前为止,我有: SELECT * FROM t1 WHERE t1.name IN (SELECT t2.name FROM t2) AND (t1.title IN (SELECT t2.title FROM t2) OR t1

如何使用“LIKE”在子查询中搜索

我试过这样做,但不起作用:

SELECT *
FROM mytable
WHERE name
    LIKE '%
        (SELECT name FROM myothertable)
        %'
到目前为止,我有:

SELECT * FROM t1
WHERE t1.name IN (SELECT t2.name FROM t2)
AND (t1.title IN (SELECT t2.title FROM t2)
    OR t1.surname IN (SELECT t2.surname FROM t2))
它工作正常,因为它返回精确匹配,但它似乎没有返回我的其他类似记录,因此我还要检查: t1.title类似于“%t2.title%”和t1.姓氏类似于“%t2.姓氏%” 我该怎么做?

例如:

SELECT a_column
FROM   mytable t
WHERE  EXISTS (
           SELECT 1
           FROM   myothertable ot
           WHERE  t.`name` LIKE '%' || ot.`name` || '%');
就术语而言:这称为相关子查询。

使用连接:

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON a.name LIKE CONCAT('%', b.name, '%')
…但如果给定mytable记录的MyTherTable中有多个匹配项,则可能存在重复项

使用存在:

SELECT a.*
  FROM mytable a
 WHERE EXISTS (SELECT NULL 
                 FROM myothertable b 
                WHERE a.name LIKE CONCAT('%', b.name, '%'))
使用MyISAM需要myothertable

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON MATCH(a.name) AGAINST (b.name)

最好的方法是创建名为NameMatch的函数

最后查询:

SELECT * FROM mytable  WHERE dbo.NameMatch(name) = 1  
该函数看起来像:

create function dbo.NameMatch 
(@_name varchar(100))
returns bit 
as  begin

    declare @res bit 
    if exists (select 1 from myothertable where @_name like '%' + name + '%' )
     set @res = 1
    else set @res  = 0
    return @res

end
它对我有用

SELECT *
FROM mytable
WHERE name
LIKE CONCAT('%',(SELECT name FROM myothertable),'%')
选择* 从t1开始 其中t1.name在t2中选择t2.name 和t1.title,从t2中选择t2.title 或者t1.在中选择姓t2.在t2中选择姓 换一种方式:

select a.field, b.code
from table1 a 
inner join (select code from table2 where ....) b on a.field like CONCAT('%', b.code, '%')

这根绳子对我很管用

"SELECT * FROM table1 WHERE field like CONCAT('%', (SELECT id FROM table2), '%')";

您的myothertable有多少行?代码中只有两个小更正。第一次删除%等。第二次在名称后添加,完整代码在我的答案中。感谢大家迄今为止的快速回复^ u^@虫族-大约10个,但这并不真正影响我要做的事情,我只想比较几个字段。@Jason_vorhees-我已经编辑了你的回复,包括我到目前为止尝试做的事情。我现在要做的是尝试对类似“%”的对象执行查询。您不能执行类似“%SELECT name FROM myothertable%”的查询,请尝试插入而不是执行类似的查询。如果我们更进一步,mysql中的每个子查询都是相关的;-或者更精确地说:优化器将每个子查询重写为相关的子查询one@zerkms:EXISTS不作为相关文件执行subquery@OMG小马:好吧,但我没说有-@虫族:我正在尽我最大的努力来牵连你p@OMG小马:是的;-顺便说一句,这些信息真的很有趣。我一直认为EXISTS是以类似于中的方式进行优化的subquery@bernie:我给出了选择,但“存在”可能是最好的选择-你是第一个,+1完美的答案。只是一个小提示:MATCH可能不会产生实际预期的结果no-这实际上会通过折磨行RBAR来执行行。SQL是基于设置的…您可以尝试在MSSQL 2000/2005/2008上运行上述命令。它很好用。我也这么做了。工作意味着尽可能高效地工作。问题是MySQL,而不是SQL Server…在MySQL 5.6上,此查询抛出错误代码:1242。子查询返回多行。您运行此操作的版本是什么?亲爱的,请确保子查询只返回一条记录。否则,如果内部select返回多行,它将不起作用