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

qwe*_*rty 16 mysql sql subquery where-clause sql-like

你会如何使用'LIKE'来搜索子查询?

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

SELECT *
FROM mytable
WHERE name
    LIKE '%
        (SELECT name FROM myothertable)
        %'
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

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))
Run Code Online (Sandbox Code Playgroud)

它工作正常,因为它返回完全匹配,但它似乎没有返回我的其他相似的记录,所以我也想检查:

t1.title LIKE'%t2.title%'和t1.surname LIKE' %t2.surname%'

我该怎么做?

OMG*_*ies 22

使用JOIN:

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON a.name LIKE CONCAT('%', b.name, '%')
Run Code Online (Sandbox Code Playgroud)

...但如果myothertable给定mytable记录中有多个匹配,则可能存在重复.

使用EXISTS:

SELECT a.*
  FROM mytable a
 WHERE EXISTS (SELECT NULL 
                 FROM myothertable b 
                WHERE a.name LIKE CONCAT('%', b.name, '%'))
Run Code Online (Sandbox Code Playgroud)

使用全文搜索MATCH(需要myothertable是MyISAM)

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON MATCH(a.name) AGAINST (b.name)
Run Code Online (Sandbox Code Playgroud)

  • +1比我的答案更完整。小马! (2认同)

ber*_*nie 11

例如:

SELECT a_column
FROM   mytable t
WHERE  EXISTS (
           SELECT 1
           FROM   myothertable ot
           WHERE  t.`name` LIKE '%' || ot.`name` || '%');
Run Code Online (Sandbox Code Playgroud)

就术语而言:这被称为相关子查询.

  • @zerkms:`EXISTS`不作为相关子查询执行 (2认同)