2012-11-26 67 views
-2

我有2個表SQL許多一對多選擇需要幫助

Bid_customer

|bidkey | customerkey 
| 1 | 1 
| 1 | 2 
| 1 | 3 

customer_groups

| groupkey | customerkey 
| 1  |  1 
| 1  |  2 
| 1  |  3 

我想要得到的是一個結果那看起來像

| bidkey | groupkey 
| 1 |  1 

我試過光標並加入只是似乎並不能夠得到我所需要的任何意見或建議

編輯:客戶可以屬於一個以上的組也

+0

你對客戶羣體和競價客戶表的主鍵? – Malkus

+0

投標表確實,但組表沒有這個數據來自postgres –

+0

我可以添加一個組我想 –

回答

1

在爲了在數據庫中有一個多對多的關係,你需要有一個定義關係的中間表,這樣你就不會得到重複或不匹配的值。

由於客戶匹配,此選擇語句將加入所有組的所有出價。

Select bidkey, groupkey 
From customer_groups 
Inner Join bid_customer 
Where customer_groups.customerkey = Bid_customer.customerkey 

她的是多對多的關係樣本:

Many To Many Relationship

對於你的問題:
您將需要加入數據的另一個表。例如,GroupBids

customer_groupsbid_customer將有GroupBids

然後,您會做下列選擇,讓您的數據的一個一對多的關係。

Select bidkey, groupkey 
From bid_customer 
inner join GroupBids 
    ON bid_customer.primarykey = GroupBids.idBidKey 
inner join customer_groups 
    ON customer_groups.primarykey = GroupBids.idCustomerGroupkey 

這將確保只有相關組和出價返回

+0

我已經試過了,現在又一次,它似乎有重複的價值和返回的記錄數高於總投標數 –

+0

@AndrewJackson我很抱歉是這裏有壞消息。但是,如果存在多對多的關係,則通常必須有中間表來定義關係,否則由於連接的工作方式,您會得到重複的。 [多對多關係的示例圖像](http://techrepublic.com/.com//cms/contentPics/associatetables-5285168-d.gif) – Malkus

+0

我知道,這是我的問題即時通訊從這個數據一箇舊系統到一個新的系統,它可以正確地處理多對多,但我需要遷移數據 –

2

我不知道誰有意義的樣本數據。但以下是一個簡單的例子。

查詢:

select distinct b.bidkey, g.gkey 
from bidcus b 
inner join cusgroup g 
on 
b.cuskey = g.cuskey 
and g.gkey = 10; 

結果:

BIDKEY GKEY 
1  10 

參考:SQLFIDDLE

+0

我試過這樣的作品,以及我把它放在一個遊標中運行它,我給了我3百萬個結果iv更新了你的小提琴,告訴你我的意思[鏈接](http://sqlfiddle.com/#!2/2a2be/1) –

+0

讓我們知道您是否需要任何幫助來定義新的表結構。通常一個表將是所謂的* transaction *表,具有多對多的關係。但是,所有表都將尊重參照完整性,您將擁有主鍵,爲您的事務處理表設置良好的外鍵以便無冗餘地導航。這是關係數據庫模式的關鍵:)我注意到你的小提琴更新。 – bonCodigo