2012-04-21 59 views
-1

我需要在兩個不同的字段上連接兩個表。我有表1所示:SQLite加入兩個重複鍵的表

key productid customer 
1 100  jhon 
2 109  paul 
3 100  john 

和表2中具有相同的字段,但aditional的數據我必須與第一臺

key productid customer status date ... 
1 109  phil  ok  04/01 
2 109  paul  nok  04/03 
3 100  jhon  nok  04/06 
4 100  jhon  ok  04/06 

兩個「關鍵」字段是自動增量。問題在於我的關係字段在結果中重複了幾次,我需要生成一對一的關係,以這種方式,表2中的一行必須與表1上的一行僅關聯一次。

我做了一個左連接(customer = customer和productid = productid),但關係重複出現,平板電腦2中的一行與表1的多行相關。

要澄清的東西...
我要交叉檢查兩個表,表1是從XLS報告加載,表2是反映客戶的交易有許多狀態數據的數據庫數據。我必須檢查數據庫中是否存在來自XLS的行,然後加載其他狀態數據。當來自XLS的行在數據庫中沒有對應數據時,我必須生成報告。

如何才能完成這個JOIN,這是可能的只有SQL?

+1

假設你想利用兩行(鍵= 3,關鍵= 4)中的一個從表2與主要= 1 table1的記錄:其中你會選擇?爲什麼? – Marco 2012-04-21 16:46:35

+0

任何一個都可以,條件是(productid = productid和customer = customer),但是是一對一的。例如,在我的示例中,table2-key3可能與tablet1-key1和key3相關,但我的要求是隻涉及一次,因此可以是key1或key4,但只能使用一次。 – ruhalde 2012-04-21 16:56:26

+0

@ Marco的問題很重要。而且,由於table1與表2具有相同的信息(這可能是錯誤的模式設計),您爲什麼關心table1呢? – 2012-04-21 16:56:30

回答

0

理解這一點的一種方法是找出每個表格究竟代表什麼。兩張表似乎都代表了同一件事,用一行代表你可能稱之爲購買的東西。爲什麼有兩個單獨的表格呢?也許第二張表更深入地談到每筆購買?就像jhon買了產品100一樣,首先是'nok',然後'ok'?是的,那麼第二個表格的關鍵(使表格唯一)就是所有三個字段。 您仍然只加入匹配的兩個字段,但如果有兩行具有相同的唯一鍵,則不能指望唯一性。 它有時有助於在表格上創建附加索引,以查看真正獨特的內容。

+0

我必須交叉檢查兩個表,表1是從XLS報告中加載的,表2是來自數據庫的數據,該數據庫反映的客戶交易中包含許多狀態數據。我必須檢查數據庫中是否存在來自XLS的行,然後加載其他狀態數據。當來自XLS的行在數據庫中沒有對應數據時,我必須生成報告。 – ruhalde 2012-04-21 17:01:51

0

您可以使用下面的sql在MS SQL中完成此操作。不確定SQLite是否支持這一點。

select a.*, c.* 
from table2 a, (select min(key) key, productid, customer 
       from table1 
       group by productid, customer 
        ) b, 
       table1 c 
where a.productid = b.productid 
and a.customer = b.customer 
and b.key = c.key