基于以下简化表:
CREATE TABLE Lexicon (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
term VARCHAR(100),
entry TEXT,
) ENGINE=InnoDB;
您将如何在数据库中查询诸如条目中不存在的术语之类的内容?或者任何条目中都不存在的术语?
我正在考虑使用 aFULLTEXT INDEX on Lexicon(entry)
但查询的AGAINST()
一部分MATCH()
不允许我传递任何绑定。
SELECT term FROM Lexicon
WHERE NOT MATCH(entry) AGAINST('only-literals-allowed-here' IN BOOLEAN MODE);
那么,全文索引是否可以在这种情况下以某种方式使用,或者具有常规模式匹配查询的普通索引将是唯一的方法?
例如(检查自己的条目):
SELECT term FROM Lexicon
WHERE entry NOT LIKE CONCAT ('%', term, '%');
或者更可怕的(检查表中的所有条目):
SELECT LexiconB.term FROM Lexicon as LexiconA
JOIN Lexicon as LexiconB ON LexiconA.entry NOT LIKE CONCAT('%', LexiconB.term, '%')
GROUP BY LexiconB.term
HAVING COUNT(*) = (SELECT count(*) FROM Lexicon);