[英]SQL for search query with multiple table join
我有下表
文獻
- docid(PK)
- 網址
數據
- wordid(PK)
- 字
標題
- 字詞
- docid
(wordid和docid組合唯一)
url
- 字詞
- docid
(wordid和docid組合唯一)
為了搜索任何短語,我將其分解為單詞並獲取其wordid
。 表wtitle
, wurl
用於對行進行評分以進行排名。 我打算添加更多表進行評分,例如inlink,inh1標簽等。但是,在對搜索詞進行sql查詢時存在問題。
我的SQL查詢就像
SELECT d.docid,furl,IF(t.wordid IS NULL,0,1) AS intitle,IF(u.wordid IS NULL,0,1) AS inurl FROM document d
LEFT JOIN wtitle t ON t.docid=d.docid
LEFT JOIN wdata w ON w.wordid=t.wordid
LEFT JOIN wurl u ON u.wordid=w.wordid AND u.docid=d.docid
WHERE w.wordid IN (wordid1,wordid2,wordid3)
我有以下疑問
wtitle
和wurl
兩個或更多,因為當前它在wtitle中搜索1st,因為LEFT JOIN和其他聯接被忽略了? 如何正確構架此SQL查詢?
Wordid 3在URL中,但不在Docid 2的標題中
Wordid 3不在URL中,但在Docid 3的標題中
我想同時返回doc 2和doc 3,因為它首先通過wtitle聯接,而忽略了(使用第一個查詢數據)其他聯接
如果你想知道是否說了,兩個字你正在尋找既出現在文檔中,你必須看標題和URL相結合。 (否則,如果您知道標題中存在一個單詞,而url中存在一個單詞,則您將不知道它是同一單詞還是兩個單詞。)因此,首先將兩個表與UNION ALL
結合使用,但要記住哪個記錄屬於哪張桌子。 然后,我們可以計算每個位置的總和(標題或網址)。
這是一個查詢,該查詢查找單詞ID 3和4。它首先列出與兩個單詞匹配的條目,然后列出與其中一個單詞匹配的文檔:
SELECT
d.docid,
d.furl,
w.cnt_combined,
w.cnt_in_title,
w.cnt_in_url
FROM document d
JOIN
(
select
docid,
count(distinct wordid) cnt_combined,
sum(place = 'TITLE') cnt_in_title,
sum(place = 'URL') cnt_in_url
from
(
select 'TITLE' as place, docid, wordid from wtitle where wordid in (3,4)
union all
select 'URL' as place, docid, wordid from wurl where wordid in (3,4)
) both_tables
group by docid
) w ON w.docid = d.docid
order by w.cnt_combined desc;
您可以通過替換來查找單詞而不是單詞ID
where wordid in (3,4)
通過
where wordid in (select wordid from wdata where word in ('vaccination', 'the'))
Rextester鏈接: http ://rextester.com/KPVX67861(SQL小提琴在大多數情況下對我不起作用。)
我建議這些涵蓋指標:
CREATE INDEX idx_wtitle ON wtitle(wordid, docid);
CREATE INDEX idx_wurl ON wurl(wordid, docid);
首先使用wordid
,DBMS可以輕松找到條目,並且docid
已經在索引中,因此DBMS不必訪問表。 它從索引中獲取所有數據。 (這就是為什么將它們稱為覆蓋索引的原因;它們覆蓋了查詢所需的所有列。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.