考虑到两列,如何做一个 LIKE?
Posted
技术标签:
【中文标题】考虑到两列,如何做一个 LIKE?【英文标题】:How to do a LIKE considering two columns? 【发布时间】:2011-10-25 01:00:03 【问题描述】:我有一个包含两列 first_name
和 last_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 并使用它来代替,因为答案中提到了性能问题。 【参考方案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。
【讨论】:
以上是关于考虑到两列,如何做一个 LIKE?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Thymeleaf 和 HTML 将数据显示到两列?
DataFrame:从一列中的字符串字典到两列中的浮点数 'latitude': '34.04', 'longitude': '-118.24' [重复]