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

Mysql SQL选择字段包含来自另一个表字段的单词的行,mysql,sql,select,contains,Mysql,Sql,Select,Contains,使用MySQL,我有一个带有名称字段的表。我想对照一组关键字检查名称字段,这些关键字指示名称不是个人,而是企业 换句话说:如果名称包含任何关键字,则获取整行 我的尝试: 从CONTAINSleads.name所在的leads中选择*,从关键字中选择word; 返回子查询返回超过1行类似这样的内容应该可以: SELECT distinct l.* FROM leads l join keywords k on l.name = k.word 编辑: 或者类似的东西,如

使用MySQL,我有一个带有名称字段的表。我想对照一组关键字检查名称字段,这些关键字指示名称不是个人,而是企业

换句话说:如果名称包含任何关键字,则获取整行

我的尝试: 从CONTAINSleads.name所在的leads中选择*,从关键字中选择word;
返回子查询返回超过1行

类似这样的内容应该可以:

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

像这样的东西应该可以做到:

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

它不是那样工作的。您可以改为使用联接

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

它不是那样工作的。您可以改为使用联接

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

SELECT * FROM leads WHERE leads.name IN (SELECT word FROM keywords);
希望这有帮助。

给您:

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

希望这能有所帮助。

对于数值,我使用带有逗号分隔符的CONCAT来确保找到准确的值。 在您的情况下,它将是:

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

对于数值,我使用带有逗号分隔符的CONCAT来确保找到准确的值。 在您的情况下,它将是:

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

最好将关键字存储在连接表中,而不是使用全文索引。@GordonLinoff您能帮助我理解这有什么帮助吗?我肯定是的,我就是看不见。我会经常做这个操作,所以我很想知道。最好是将关键字存储在连接表中,而不是使用全文索引。@GordonLinoff您能帮我理解这有什么帮助吗?我肯定是的,我就是看不见。我会经常做这个操作,所以我真的很想知道。谢谢,问题是l.name必须只包含k.word,而不是等于它。添加了更新以包含逗号分隔列表的大小写谢谢,问题是l.name必须只包含k.word,不等于它。添加了更新以包含逗号分隔列表的大小写。如果您有像butterfly这样的关键字,则Instr将给出误报,butterfly将在搜索butterfly时作为匹配项返回。我不确定这是否是最佳解决方案,但是我所有的关键字都被空格包围,以避免像这样的误报。我一直在以编程的方式处理这个问题,直到现在,我还用空格包围名称,以确保我捕捉到所有单词。如果你有像butterfly这样的关键字,instr将给出误报,butterfly将在搜索butterfly时作为匹配项返回。我不确定这是否是最好的解决方案,但是我所有的关键字都被空格包围,以避免像这样的误报。我一直以编程的方式处理这个问题,直到现在,我还用空格包围名称,以确保捕获所有单词。