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
使用 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