2011-09-28 169 views
1

我有两个表叫mp_Blogsmp_BlogCategoriesSQL:连接两个表

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

您希望使用哪个规则来使ItemId = 3-> CatId = 1和ItemId = 4-> CatId = 2?他们都有ModuleId = 11,那么你如何去决定? – Marco

+0

实际上,itemid和catid是标识列,所以还有其他方法可以获得该实际输出 – Chandru

+1

是的,您的内容或表格定义存在问题。如果ModuleId是唯一的键,则项目3和4都链接到类别1和2。我怀疑你缺乏另一个关键。 – regilero

回答

0

查询运行正常,但y中的数据有问题你可以看到表中包含11个id两个时间就是这样的结果。它更好地检查表中的数据。

+0

我检查了表,它只是为了ItemId = 3-> CatId = 1和ItemId = 4- CatId = 2具有相同的moduleid = 11,所以这有任何其他方式来获得我原来的输出 – Chandru

0

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

+0

我检查了表就像只有ItemId = 3- CatId = 1和ItemId = 4- CatId = 2才具有相同的moduleid = 11,所以这里有其他任何方式来获得我的原始输出 – Chandru

+0

@Chandru:你看过我的评论吗?问题是:这是您为ItemId = 3选择CatId = 1并且当它们共享相同ModuleId时为ItemId = 4选择CatId = 2的原因?为什么?请解释,因为我们不明白... – Marco

+0

@Marco:在我们的网站中,如果用户创建了新页面并且它影响模块表,所以在该页面中也创建了moduleid,他们添加了称为博客的新功能,它的名为mp_blog的命中表您可以在我的文章中看到表格结构,显然我们在我们的博客所以它的类别,所以它击中表mp_blogcategory现在我们要做什么意味着我要获取该特定模块的itemid和categoryid并插入到mp_blogitemcategory和那里字段(itemid和categoryid) – Chandru

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 
+0

ItemID和Categoryid是标识列我的表需要插入到名为[mp_BlogItemCategories]的表中,字段为 ID(Identity),ItemID,CategoryID itemid(column)is in different table and categoryid(column)is in different table if if my give my moduleid = 11 in my mp_BlogItemCategories表 Id 1 ItemId:3,4 CategoryID:1,2 我该如何做到这一点 – Chandru