将SQL查询与联接进行比较

时间:2013-04-21 20:05:33

标签: sql join

- 查询1

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,其中连接位于事务表中的RelatedProductID和FinancialProducts表中的productID

然后,两个查询都在同一个表中结束,并在该表中选择相同的列。

最后,FinancialProductID在第一个查询中为22,在第二个查询中,所有11行的financialProductID为22

实际问题:哪一种是导航到桌面的正确形式

1 个答案:

答案 0 :(得分:1)

您提出的问题是关于数据含义的业务问题

看起来两个版本的查询都正确地将表连接在一起。您了解您的业务领域,而我们其他人则不了解。

那就是说,根据表格的名称,第一个版本对我来说“有意义”。交易有客户,客户有产品。因此,如果您想在交易中为客户提供所有产品,那么第一个似乎就是这样做。

我不知道FinancialProducts在这个数据库中扮演什么角色。第二个版本很可能对这个应用程序“更有意义”。如果您正在使用此数据库,您应该了解这些表是什么。