2013-05-16 55 views
0

我有一個表的數據庫,其中有3列。下面是.schema給出: .schemaSQL3查詢,無法理解我在做什麼錯

CREATE TABLE Frequency (
docid VARCHAR(255), 
term VARCHAR(255), 
count int, 
PRIMARY KEY(docid, term)); 

我試圖連接查詢得到兩個特定的文檔ID和長期匹配他們,(對不起,如果它沒有任何意義,我是新來的SQL) 。我期待一個表格式:

docid1 |term |count 
docid2 |term |count 

但我的格式爲docid1 |term |count|docid2 |term |count 我究竟做錯了得到結果?

也試圖選擇文檔ID或任何其他列的,而不是做一個選擇*給我一個含糊的鍵錯誤。以下是我正在使用的查詢:

select* from (select docid, term, count from frequency where docid = '10080_txt_crude') as c join (select docid , term, count from frequency where docid = '17035_txt_earn') as d on c.term = d.term; 

最後在最後通過docid添加組只給出一個答案。

回答

0

嘗試select c.* from ...選擇從一個表的所有列,而不是所有連接表中的所有列。

select c.* from 
    (select docid, term, count from frequency where docid = '10080_txt_crude') as c 
join 
    (select docid , term, count from frequency where docid = '17035_txt_earn') as d 
on c.term = d.term; 

或者,也許你可以進一步簡化語法?

select c.docid,c.term,c.ount 
from frequency c 
join frequency d on c.term = d.term 
where c.docid = '10080_txt_crude' and 
    d.docid = '17035_txt_earn'; 

與現在的問題是,你在哪裏實際使用D.

你試圖做select * from frequency where docid='10080_txt_crude' or docid='17035_txt_earn'? 2個DocIDs之間


加入匹配條款:

select c.docid as c_docid, d.docid as d_docid, c.term, c.count, d.count 
from frequency c 
join frequency d on c.term = d.term 
where c.docid = '10080_txt_crude' and 
    d.docid = '17035_txt_earn'; 

這將產生(C的DocID,d的DocID,期限(在C和d相等),C計數,d計數)。

+0

我試圖讓docid與這兩個ID然後列出條款匹配的那些。執行你的代碼,例如讓我含文檔ID 1的結果,但我想要的是列出從文檔ID 2以及正下方,該文檔ID的滿足上述條件。是否有意義?不知道我是否清楚解釋。 – pravinoku

+0

如果你想要的結果並排側,這是選擇C *,d *用JOIN。如果你想要一個以上的結果,那就是一個UNION。使用JOIN更容易找到匹配 - SQL表達式可以通過連接引用列,但不能在行之間引用。在SQL查詢和其他操作中,行在數學上是獨立的。 –

+0

所以SELCT *同一個連接只能通過側產生結果的一面呢?這是一個h/w的任務,當我找到正確的答案時,我會保持發佈。我可能錯過了一些東西。 – pravinoku

1
SELECT docid,term,count 
FROM Frequency 
WHERE docid=docid1 or docid=docid2 
GROUP BY docid,term,count 
HAVING COUNT(*) >1