我正在索引帖子的两件事。一个是标题(单词),两个是关键字。我选择使用3个表:
word_index (word,word_id) // al words and keywords are indexed
keyword_rel (word_id,postId) // relations with the keywords
word_rel (word_id,postId) // relations with the the words of the title
现在我正在尝试对此执行一个不错的搜索查询。仅使用关键字,它可以正常工作。
SELECT p.postId
FROM word_index wi
INNER JOIN keyword_rel kr ON wi.word_id=kr.word_id
INNER JOIN post p ON p.postId=kr.postId
WHERE wi.word LIKE 'input%'
GROUP BY p.postId
但是现在我想包括word_rel
来搜索标题。
我尝试了这个,但它听起来不对,也没有返回所有内容(缺少一些wi.word):
SELECT p.postId,wi.word
FROM word_index wi
INNER JOIN keyword_rel kr ON wi.word_id=kr.word_id
INNER JOIN word_rel wr ON wi.word_id = wr.word_id
INNER JOIN post p ON p.postId=kr.postId
INNER JOIN post pi ON pi.postId=wr.postId
WHERE wi.word LIKE 'input%'
GROUP BY p.postId
问题在于INNER JOIN post p
与keyword_rel
有关。现在我还需要它与word_rel
相关。有什么好办法呢?
答案 0 :(得分:0)
你需要在这里做一个UNION:
SELECT p.postId, wi.word
FROM word_index wi
INNER JOIN keyword_rel kr ON wi.word_id = kr.word_id
INNER JOIN post p ON p.postId=kr.postId
WHERE wi.word LIKE 'input%'
GROUP BY p.postId
UNION
SELECT p.postId, wi.word
FROM word_index wi
INNER JOIN word_rel wr ON wi.word_id = wr.word_id
INNER JOIN post p ON p.postId=wr.postId
WHERE wi.word LIKE 'input%'
GROUP BY p.postId
由于这可能会将某些结果返回两次或更多次(特别是如果 word 包含在关键字和标题中),您可能希望将上述查询包装到另一个{{1 }}:
SELECT DISTINCT