默认情况下,它是这样的:
select * from main_table where match(col1,col2) against('search_item');
但我想要获取的是相反的,
说,我已经恢复了所有search_item(例如1000条记录),
我希望看到哪些匹配main_table中的指定行。
可行吗?
答案 0 :(得分:1)
您可以执行以下操作:
SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
如果你有一个巨大的数据集可以通过,那将会非常慢。
如果速度是一个问题,另一种处理这个问题的方法(虽然承认要复杂得多)是从数据库中获取所有数据并自己构建ternary search tree(也称为trie)。一旦你完成了构建trie的开销,与蛮力方法相比,对输入字符串的匹配是快速的。
答案 1 :(得分:0)
我意识到这已经晚了十个月,但仅仅是为了后人。我想你所说的是你想要 search_items 表中不匹配查询的所有行:
select * from main_table where match(col1,col2) against('search_item');
我将假设你的main_table有一些我称之为unqid的唯一标识符列。
select * from main_table
WHERE
unqid not in (select unqid
from main_table
where match(col1,col2) against('search_item')
)
我的第一个想法是使用MINUS运算符但事实证明MySQL没有运算符!