【问题标题】:How do I extract only the shipping address and not the billing address using SQL and join?如何使用 SQL 和加入仅提取送货地址而不提取帐单地址?
【发布时间】:2014-06-02 15:14:24
【问题描述】:

我正在尝试使用联接从客户表和地址表中返回 FirstName、LastName、Line1、City、State 和 ZipCode。我将为每位客户退回一行,但仅退回作为客户送货地址的地址。这是我目前所拥有的:

SELECT FirstName, LastName, Line1, City, State, ZipCode
FROM Customers JOIN Addresses
    ON (Customers.CustomerID = Addresses.CustomerID);

这些是客户表的字段:

CustomerID EmailAddress Password FirstName LastName ShippingAddressID BillingAddressID 

这些是地址表的字段:

AddressID CustomerID Line1 Line2 City State ZipCode Phone Disabled

我尝试使用临时关系,但它不起作用。我不知道如何只过滤掉送货地址。

【问题讨论】:

    标签: sql sql-server select join filtering


    【解决方案1】:

    您的意思是,即使没有地址,您也需要返回客户详细信息。

    如果是这样,使用左连接

    SELECT FirstName, LastName, Line1, City, State, ZipCode
    FROM Customers LEFT JOIN Addresses
        ON (Customers.CustomerID = Addresses.CustomerID and 
    Customers.ShippingAddressID=Addresses.AddressID)
    

    【讨论】:

    • 所有客户都有一个帐单和送货地址,但有时地址是相同的。
    【解决方案2】:

    我认为当您使用内部联接时,如果两个表中都存在,它将带来记录,而不是使用左联接。

    SELECT FirstName, LastName, Line1, City, State, ZipCode
    FROM Customers Left JOIN Addresses
        ON Customers.CustomerID = Addresses.CustomerID and Customers.ShippingAddressId = Addresses.AddressID;
    

    【讨论】:

      【解决方案3】:

      您的加入必须基于 AddressIds,而不是 CustomerIds,即:

      SELECT FirstName, LastName, Line1, City, State, ZipCode
      FROM Customers JOIN Addresses
      ON (Customers.ShippingAddressId = Addresses.AddressID);
      

      【讨论】:

      • 还有……你怎么知道的?
      • 因为标题How do I extract only the shipping address and not the billing address using SQL and join?
      • 还有 OP:I am to return one row for each customer, but only return addresses that are the shipping address for a customer.
      • 嗯不错,但是 1 个 IMP。东西不见了,还需要加入客户 ID。我已经编辑了你的答案。请检查。
      • 由于这些字段中的任何一个是主键或外键,这是否会被视为临时关系?有人告诉我要小心处理临时关系?谁能解释一下为什么?
      猜你喜欢
      • 2010-10-18
      • 2018-05-12
      • 2013-02-28
      • 2012-08-15
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多