【问题标题】:How to do a LIKE considering two columns?考虑到两列,如何做一个 LIKE?
【发布时间】:2011-10-25 01:00:03
【问题描述】:

我有一个包含两列 first_namelast_name 的客户表。

如何在查询中使用 LIKE 来同时从两列中获取数据?

例如:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%'

我试过了,它告诉我full_name 列不存在。

【问题讨论】:

  • Full Text Search 是 SQL 中做你想做的最有效的方法。
  • @OMG 因为我可以更改表和数据插入,所以我创建了一个新的索引列 full_name 并使用它来代替,因为答案中提到了性能问题。

标签: mysql sql concatenation sql-like


【解决方案1】:
SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

可能会很慢,但如果您的数据库非常小,这并不重要。使用CONCAT 时,请确保两个列名的排序规则相同,否则它将获取错误。

以下是我希望我的LIKE 语句同时适用于类别名称和课程名称的声明。我检查了两个表中的 cat_id,以便了解哪个课程属于哪个类别。

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name)
LIKE :name ORDER BY b.cat_id

:名称是占位符(PDO)

【讨论】:

    【解决方案2】:

    使用HAVING 代替WHERE

    SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
       FROM customer HAVING full_name LIKE 'John D%'
    

    【讨论】:

    • 为什么 HAVING 而不是 WHERE?
    【解决方案3】:

    我手头没有MySql,但你不能像下面的代码那样做吗?

    SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
    FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
    

    免责声明:这可能会很慢!!!

    【讨论】:

      【解决方案4】:
      SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
      FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
      

      【讨论】:

      • 您可能还需要修剪 first_name 和 last_name 以解决列中可能存在的额外空格。
      • 如果用户也可以输入“姓氏,名字”变体,您也可以检查它。
      • 如此简单,精彩。 danke :)
      • 'CONCAT' 不是可识别的内置函数名称。
      • 在 where 子句中使用 'full_name' 有什么问题?
      【解决方案5】:

      你快到了

      SELECT * 
      FROM customer 
      WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
      

      注意:这可能没有很好的性能。你可以考虑full text search

      【讨论】:

        猜你喜欢
        • 2014-02-12
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 2015-04-18
        • 1970-01-01
        相关资源
        最近更新 更多