SQL JOIN重复行

时间:2011-11-16 03:42:20

标签: mysql

我正在尝试加入2个表并为每个项目抓取一行。评级的默认值为45.每次在某个类别中有不同的评级时,每个项目行都会重复。下面是一个示例模式,数据和结果。

表1 --------------------------
ofid |项目|类别
--------------------------
  1 | item1 | CAT1
  2 | item2 | CAT1
  3 | item3 | cat1

表2 ---------------------------
ofid |评级|类别
---------------------------
  1 | 37 | CAT1
  2 | 42 | CAT1
  3 | 45 | CAT1

结果
------------------------------------
ofid |项目|评级|类别
------------------------------------
  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 |项目|评级
------------------------------------
  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 ....帮忙?

提前致谢。

5 个答案:

答案 0 :(得分:2)

根据您对预期结果的要求,我相信您正在加入错误的领域。下面应该有用。

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

答案 1 :(得分: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

答案 2 :(得分:0)

这是一个非常正常的结果,因为您正在对您选择的所有3个字段进行分组。如果您想在结果集中单独复制每个ofid,请仅执行GROUP BY p.ofid

答案 3 :(得分:0)

除了(或代替?)ofid之外,你可能想加入categorytable1中的所有三个条目都有"cat1"table2中的所有三个条目都有"cat1",因此table1中的每条记录都匹配table2中的所有三个记录1}}。因此,在结果中预期3×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

答案 4 :(得分: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'