我正在研究创造这样做的东西:
SELECT *
FROM (`tm_accounts`)
WHERE CONCAT(`last_name`, `first_name`) LIKE '%o%'
当然,这不起作用。我只是想让你看到我想要模仿的背后的想法。
last_name和first_name是帐户表中的两个单独字段
答案 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_name
或TM_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%'