MYSQL在WHERE子句中使用LIKE在子查询中搜索
如何使用“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
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返回多行,它将不起作用