Sql:加入两个表

时间:2011-09-28 07:37:49

标签: sql

我有两个名为mp_Blogsmp_BlogCategories

的表格

mp_blog包含列和值

 ItemID   ModuleID 
   3         11
   4         11
   5         13

mp_BlogCategories包含列和值

 CategoryID ModuleID 
   1         11
   2         11
   3         13

我需要像这样的输出

 ItemID   CategoryID
   3         1
   4         2
   5         3

我使用了这个查询

SELECT a.[ItemID],b.[CategoryID] 
from [mp_Blogs] a 
    join [mp_BlogCategories] b 
        on a.ModuleID=b.ModuleID

但它以不同的方式出现

 ItemID   CategoryID
   3         1
   4         1
   3         2
   4         2
   5         3

我也使用了groupby函数,但输出和以前一样,查询中有任何错误 如何获得我的原始输出

SELECT a.[ItemID],b.[CategoryID] 
from [mp_Blogs] a 
    join [mp_BlogCategories] b 
        on a.ModuleID=b.ModuleID  
group by b.CategoryID,a.ItemID

3 个答案:

答案 0 :(得分:0)

您的查询正在正常执行,但是您的表中的数据存在问题,因为您可以看到该表包含11个id两次,即它给出的结果是这样的。最好查看表格中的数据。

答案 1 :(得分:0)

从输出看,数据似乎有问题,而不是查询。

答案 2 :(得分:0)

阅读评论后,两个表中都缺少唯一键 所以我建议你在两个表中添加键以达到你的结果。

怎么样 - 在mysql中测试工作正常。

-- id column primary key in mp_blog table.

create table mp_blog(id smallint(5),ItemID smallint(5),
ModuleID smallint(5),constraint mp_blog_id primary key(id));

insert into mp_Blog values(1,3,11),(2,4,11),(3,5,13);

-- id column foreign key references to mp_blog primary key id.

create table mp_BlogCategories(id smallint(5),CategoryID smallint(5),
ModuleID smallint(5),constraint fk_mp_blogc foreign key(id) references mp_blog(id));

insert into mp_BlogCategories values(1,1,11),(2,2,11),(3,3,13);

-- finally what you are trying to achieve..

select b.itemid,bc.categoryid
from mp_blog b INNER JOIN mp_BlogCategories bc
on b.id=bc.id;


 ItemID   CategoryID
   3         1
   4         2
   5         3