SQL选择行,其中字段包含来自另一个表的字段的单词

时间:2015-07-06 16:45:25

标签: mysql sql select contains

使用MySQL,我有一个带有名称字段的表。我想根据一组“关键字”检查该名称字段,该关键字表示该名称不是人,而是业务。

单词:如果名称包含任何关键字,请获取整行。

我的尝试: SELECT * FROM leads WHERE CONTAINS(leads.name, (SELECT word FROM keywords)); (返回“子查询返回超过1行”)

4 个答案:

答案 0 :(得分:3)

它不起作用。您可以使用连接

SELECT l.* 
FROM leads l
JOIN keywords k on instr(leads.name, word) > 0 

答案 1 :(得分:0)

这样的事情应该这样做:

SELECT distinct
    l.* 
FROM 
    leads l
    join keywords k on l.name = k.word

编辑: 如果你有逗号分隔列表

,或类似的东西
SELECT distinct
    l.* 
FROM 
    leads l
    join keywords k1 on l.name like concat('%,', k1.word)
    join keywords k2 on l.name like concat('%,', k2.word, ',%')
    join keywords k3 on l.name like concat(k2.word, ',%')
    join keywords k4 on l.name = k4.word

答案 2 :(得分:0)

你在这里:

SELECT * FROM leads WHERE leads.name IN (SELECT word FROM keywords);

希望这有帮助。

答案 3 :(得分:0)

使用数值,我使用CONCAT与逗号分隔符,以确保找到确切的值。 在你的情况下,它将是:

SELECT l.* FROM leads l 
JOIN keywords k 
on instr(CONCAT(',', leads.name, ','),  CONCAT(',', word, ',')) > 0