SQL select 行,其中字段包含另一个 table 字段中的单词

SQL select rows where field contains word from another table's fields

使用 MySQL,我有一个带有名称字段的 table。我想根据一组 "keywords" 检查该名称字段,这表明该名称不是一个人,而是一个企业。

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

我的尝试: SELECT * FROM leads WHERE CONTAINS(leads.name, (SELECT word FROM keywords)); (Returns "Subquery returns more than 1 row")

应该这样做:

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 * 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