2011-11-16 122 views
0

我想加入2個表格,併爲每個項目抓取一行。評級的默認值是45.每次在一個類別中有不同的評級時,每個項目行都是重複的。以下是一個示例模式,數據和結果。SQL JOIN重複行

表1
--------------------------
OFID | item |類別
--------------------------
1 | item1 | cat1
2 | item2 | cat1
3 | item3 | CAT1

表2
---------------------------
OFID |評級|類別
---------------------------
1 | 37 | cat1
2 | 42 | cat1
3 | 45 | CAT1

結果
------------------------------------
OFID | item |評級|類別
------------------------------------
1 | item1 | 37 | cat1
1 | item1 | 42 | cat1
1 | item1 | 45 | cat1
2 | item2 | 37 | cat1
2 | item2 | 42 | cat1
2 | item2 | 45 | cat1
3 | item3 | 37 | cat1
3 | item3 | 42 | cat1
3 | item3 | 45 | CAT1

預期結果
------------------------------------
OFID | item | rating
------------------------------------
1 | item1 | 37
2 | item2 | 42
3 | item3 | 45

查詢:
SELECT p.ofid,p.item,r.rating FROM table1 AS p INNER JOIN table2 AS r ON p.category = r.category WHERE p.category = "cat1" GROUP BY p.ofid,p.category,r.rating

我已經嘗試添加DISTINCT,JOIN,LEFT JOIN,RIGHT JOIN ....幫助?

在此先感謝。

+0

請注意,您的「預期結果」有四列,而您的select語句只選擇三列。我認爲這是一個錯字。 – larsks

+0

非常正確。編輯。謝謝你的收穫。 – zero742

回答

0

這是一個非常正常的結果,因爲您正在對所選的所有3個字段進行分組。如果您想在結果集中包含每個ofid的單個副本,則僅執行GROUP BY p.ofid

+0

我也試過了。它確實給出了正確的行數,但是它給出了所有3個評級的45。 – zero742

+0

這也是預期的。你想要什麼評級?所有收視率的平均值是多少?然後'選擇平均(p.ofid)...' –

2

根據你想要的預期結果,我相信你加入了錯誤的領域。以下應該工作。

Select 
    p.ofid, 
    p.item, 
    r.rating 
From table1 p 
Inner Join table2 r On r.ofid = p.ofid 
where p.category ="cat1" 
+0

Correctomundo !!!!我想我只是盯着這個太長時間了。榮譽先生! – zero742

1

也許我誤解了,但是你不想加入這些知識點嗎?

SELECT p.ofid,p.item,r.rating 
FROM table1 AS p 
INNER JOIN table2 AS r 
    ON p.category = r.category AND p.ofid = r.ofid 
WHERE p.category = "cat1" 
GROUP BY p.ofid,p.category,r.rating 
0

你可能想加入上除了(或代替?)categoryofidtable1中的所有三個條目都有"cat1",並且table2中的所有三個條目也都有"cat1",因此table1中的每條記錄都與table2中的所有三條記錄相匹配。因此,結果中預期3 x 3 = 9行。你可能想要這樣的事情:

SELECT p.ofid,p.item,r.rating 
FROM table1 AS p 
INNER JOIN table2 AS r ON p.category = r.category 
         AND p.ofid = r.ofid 
WHERE p.category = "cat1" 
GROUP BY p.ofid,p.category,r.rating 
0

我相信這是你正在嘗試做什麼?

SELECT p.offid,p.item,r.rating,r.category FROM table1 p INNER JOIN table2 r 
ON p.category = r.category 
AND p.offid = r.offid 
WHERE p.category = 'cat1'