2013-04-21 181 views
0

--Query1比較SQL查詢連接

SELECT TransactionDetails.Transactions.TransactionId 
,  TransactionDetails.Transactions.CustomerId 
,  TransactionDetails.Transactions.TransactionType 
,  TransactionDetails.Transactions.DateEntered 
,  TransactionDetails.Transactions.RelatedProductId 
,  CustomerDetails.CustomerProducts.CustomerFinancialProductId 
,  CustomerDetails.CustomerProducts.CustomerId AS 'CustomerProducts--CustomerID' 
,  CustomerDetails.CustomerProducts.FinancialProductId 
,  CustomerDetails.CustomerProducts.AmountToCollect 
FROM TransactionDetails.Transactions 
    INNER JOIN CustomerDetails.Customers ON TransactionDetails.Transactions.CustomerId =  CustomerDetails.Customers.CustomerID 
    INNER JOIN CustomerDetails.CustomerProducts ON CustomerDetails.Customers.CustomerID =  CustomerDetails.CustomerProducts.CustomerId 
WHERE TransactionId = 2 
ORDER BY CustomerFinancialProductId 

--Query2

SELECT TransactionDetails.Transactions.TransactionId 
    , TransactionDetails.Transactions.CustomerId 
    , TransactionDetails.Transactions.TransactionType 
    , TransactionDetails.Transactions.DateEntered 
    , TransactionDetails.Transactions.RelatedProductId 
    , CustomerDetails.CustomerProducts.CustomerFinancialProductId 
    , CustomerDetails.CustomerProducts.CustomerId AS 'CustomerProducts--CustomerID' 
    , CustomerDetails.CustomerProducts.FinancialProductId 
    , CustomerDetails.CustomerProducts.AmountToCollect 
FROM TransactionDetails.Transactions 
    INNER JOIN CustomerDetails.FinancialProducts ON  TransactionDetails.Transactions.RelatedProductId = CustomerDetails.FinancialProducts.ProductId 
    INNER JOIN CustomerDetails.CustomerProducts ON  CustomerDetails.FinancialProducts.ProductId = CustomerDetails.CustomerProducts.FinancialProductId 
WHERE TransactionId = 2 
ORDER BY CustomerFinancialProductId 

這裏是我已經給出比較兩個查詢。它會問哪一個導航更好?是否應該使用正確的導航?

我知道第一個查詢只返回1行,其中第二個返回11行。 另外,查詢1在事務中導航到使用ProductID的客戶,因爲它是每個列中的列。第二個查詢從Transactions到FinancialProducts,其中的交易位於Transactions表中的RelatedProductID和FinancialProducts表中的productID

這兩個查詢都會在同一個表中結束,並在該表中選擇相同的列。

最後的FinancialProductID是在第一查詢22和在第二查詢中的所有11行有22

ACTUAL問題的financialProductID:哪一個是導航到TABLE

+2

我認爲這是一個只有你能回答的問題。由於結果不同,您需要決定哪些結果是由您的特定業務需求定義的「正確」結果。 – 2013-04-21 20:30:58

+0

運行查詢1時,您得到了什麼結果,用'LEFT JOIN'替換了第一個'INNER JOIN'? – jerdiggity 2013-04-21 20:32:08

回答

1

問題的正確的形式您要求的是關於數據含義的業務問題

看起來兩個版本的查詢都正確地將表連接在一起。您瞭解您的業務領域,而我們其他人則不瞭解。

也就是說,根據表名,第一個版本對我來說「有意義」。交易有客戶,客戶有產品。所以,如果你想在交易中爲客戶提供所有的產品,那麼第一個似乎就是這樣做的。

我不知道FinancialProducts在這個數據庫中扮演了什麼角色。第二個版本很有可能對這個應用程序「更有意義」。如果你使用這個數據庫,你應該知道這些表是什麼。