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

标签 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.surname IN (SELECT t2.surname FROM t2))

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

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

我该怎么做?

最佳答案

使用 JOIN:

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON a.name LIKE CONCAT('%', b.name, '%')

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

使用 EXISTS:

SELECT a.*
  FROM mytable a
 WHERE EXISTS (SELECT NULL 
                 FROM myothertable b 
                WHERE a.name LIKE CONCAT('%', b.name, '%'))

使用 Full Text Search MATCH (要求 myothertable 是 MyISAM)

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

关于MYSQL 在 'LIKE' 子句中使用 'WHERE' 在子查询中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022338/

相关文章:

php - Codeigniter 子查询

php - laravel 中的 groupBy 与 Eloquent 关系

sql - 替换 SQL 结果中的字符

sql - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

sql - 新手问题 : Problem with results, sql, join, where, "<"操作符

mysql - select 语句中子查询的困惑

mysql - 我怎样才能加入这两个查询?

php - SQL 选择值匹配的最新行

mysql - 多个分组依据的聚合函数

mysql - 如何在 SQL 中计算其他两个表列的值