2013-04-21 121 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在这个数据库中扮演了什么角色。第二个版本很有可能对这个应用程序“更有意义”。如果你使用这个数据库,你应该知道这些表是什么。