2011-09-28 143 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