0

3 つの列がある 1 つのテーブルを持つデータベースがあります。.schema が与えるものは次のとおりです。

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

結合クエリを使用して 2 つの特定のドキュメント ID を取得し、それらを用語で照合しようとしています (意味が分からない場合は申し訳ありませんが、SQL は初めてです)。次の形式のテーブルを期待していました。

docid1 |term |count
docid2 |term |count

しかし、私はdocid1 |term |count|docid2 |term |count 何を間違っているのですか?

また、select* を実行する代わりに docid またはその他の列を選択しようとすると、あいまいなキー エラーが発生します。私が使用しているクエリは次のとおりです。

 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 によるグループを最後に追加すると、答えは 1 つしか得られません。

4

2 に答える 2

0

結合されたすべてのテーブルからすべての列を選択するのではなく、 1 つのテーブルからすべての列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 つの DocID 間で一致する用語を結合する:

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, Term (C と D が等しい) , C Count, D Count) が生成されます。

于 2013-05-16T12:02:05.047 に答える