使用 CONCAT LIKE AND 的 SQL 查询

4

我有一个类似这样的查询:

SELECT * FROM `tbl_shop` 
WHERE
  (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND
   LOWER (CONCAT(address, name)) LIKE (LOWER('%smoke%')));

我的问题很简单 - 是否有任何方法可以在不重复 CONCAT(address, name) 部分的情况下编写此代码?
我尝试过。
SELECT * FROM `tbl_shop`
WHERE 
  (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND (LOWER('%smoke%')));

但是这并没有给出任何结果。我需要包含两个单词的所有结果,但不能使用全文搜索,因为我正在使用InnoDB并且希望保留它。提前感谢您。
1个回答

3

您可以做到

SELECT b.* FROM
(
   SELECT a.*, LOWER(CONCAT(a.address, a.name)) AS field_to_check
)b 
WHERE b.field_to_check LIKE (LOWER ('%boston%')) 
 AND  b.field_to_check LIKE (LOWER('%smoke%'));

然而,这只是语法糖,不应该影响性能。

性能对我很重要。如果没有区别,第一种方式对我来说更易读,可能会一直使用它。谢谢回复! - kokoseq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接