2017-03-09 85 views
0

例如,如果我想鏈接OPOR,ODDR但不知道它們之間的共同密鑰是什麼,我怎麼能找到它呢?SQL Server - 如何確定2個表之間的共享密鑰?

例子:

SELECT o0.NumAtCard 'Customer PO' 
    , o0.DocNum 'Sales Order No' 
    , o1.DocNum 'Purchase Order No' 
    , o2.DocNum 'Delivery Order No' 
    , o0.DocTotal 'Total Price' 
FROM ORDR o0 
JOIN OPOR o1 ON o0.primarykey = o1.foreignkey -- left? 
JOIN ODLN o2 ON o1.primarykey = o2.foreignkey -- inner? 

如何確定什麼 「的PrimaryKey」 和 「外鍵」 是什麼?

OPOR的表結構: enter image description here

ODLN表結構: enter image description here

+0

SAP是它自己的動物。這裏的SQL-Server和Crystal-Reports是紅鯡魚。請參閱http://stackoverflow.com/a/43402217/6099655 – CWilson

回答

0

你需要知道兩個表的結構。在SQL服務器:

sp_help TableA; 
sp_help TableB; 

在MySQL:

describe TableA; 
describe TableB; 

這將顯示你的表結構。如果數據庫設計的很好,你應該能夠知道哪些列是外鍵。你可能期待的東西,是不是有

1):

就知道哪些欄目根據您發佈的結果參與上。 2)它可以取決於你想要做什麼。假設你想匹配OPOR行ODLN在那裏它們被標記爲ODLN取消了,你會去:

select * from OPOR 
inner join ODLN on 
OPOR.DocEntry=ODLN.DocEntry 
where CANCELLED='true'; 

或任何用於取消的有效值是。但是,如果不知道你希望的查詢或更多關於這些列的含義的理解,我不能真正提供建議。這些表格看起來完全一樣,這表明加入它們是不尋常的。

+0

謝謝,我使用exec sp_help爲我想加入的表提取數據結構。我只是用截圖更新了我的帖子。我如何知道哪些列是外鍵? – vnguyen

+0

感謝您的解釋。所以我正在嘗試創建一個鏈接銷售訂單和採購訂單的業務報告,另外還有交貨單編號。銷售訂單是我公司銷售的商品。採購訂單是我們從供應商處購買的貨物。鏈接的目的是在提交SO之後確認採購訂單已發貨(因此爲送貨單據)。希望澄清一點。 – vnguyen

+0

你沒有機會設計這個數據庫的人嗎? (這是一個家庭作業問題?)我猜想DocNum列是你想要使用的列,因爲它是唯一的其他整數列。例如。一個表中的DocEntry =另一個表中的DocNum,但這是一個猜測。我期望如果這是正確設置的外鍵,信息將顯示在你看到主鍵信息的地方。 – Ilion

0

如果向下滾動sp_help結果,則應該看到約束。如果存在主鍵約束,請查看它使用的密鑰。主鍵通常是用於鏈接到另一個表的主鍵。

+0

你是對的,這裏有主鍵約束。所有3個表都將DocEntry作爲主鍵。我嘗試使用ORDR&OPOR進行內連接,然後離開連接ODLN&OPOR,但數據看起來不正確。我沒有正確使用連接嗎? – vnguyen

+0

如果不知道您的查詢,您的預期結果以及您的實際結果,就無法說出來。這也是另一個問題。我會加入@QCDATA的說法,通常你將一個表中的主鍵連接到另一個表中的另一列。在你的情況下,表格看起來完全一樣,所以它有點不同尋常。 – Ilion

+0

@Ilion - 這是有道理的。假設我想加入OPOR的ORDR。我將使用ORDR的主鍵與OPOR的外鍵結合。我如何在OPOR表中找到這個外鍵? – vnguyen

相關問題