有没有办法同时搜索2个或更多字段?

时间:2009-11-27 03:48:35

标签: sql mysql database

我正在研究创造这样做的东西:

SELECT *
FROM (`tm_accounts`)
WHERE  CONCAT(`last_name`, `first_name`)  LIKE '%o%'

当然,这不起作用。我只是想让你看到我想要模仿的背后的想法。

last_name和first_name是帐户表中的两个单独字段

2 个答案:

答案 0 :(得分:9)

SELECT *
FROM (`tm_accounts`)
WHERE last_name LIKE '%o%' 
   or first_name LIKE '%o%';

答案 1 :(得分:9)

我建议使用:

SELECT a.*
  FROM TM_ACCOUNTS a
 WHERE a.first_name LIKE '%o%'
UNION
SELECT b.*
  FROM TM_ACCOUNTS b
 WHERE b.last_name LIKE '%o%'

OR因性能不佳而臭名昭着,并且存在维护风险。

请注意我正在使用UNION,这将删除最终结果集中的重复项。虽然UNION ALL表现更好,但它不会删除重复项 - 这使得它不适合在这种情况下使用。

如果您不知道,在LIKE条件的左侧放置通配符将不会使用索引。因此,如果您有TM_ACCOUNTS.last_nameTM_ACCOUNTS.first_name的索引(或两者都使用覆盖索引)。

此:

WHERE CONCAT(`last_name`, `first_name`)  LIKE '%o%'

...不是一个好习惯 - 更好的方法是在子选择/内联视图中执行该功能。例如:

SELECT x.*
  FROM (SELECT t.*,
               CONCAT(t.last_name, t.first_name) AS full_name
          FROM TM_ACCOUNTS t) x
 WHERE x.full_name LIKE '%o%'