【问题标题】:SQL Server : JOIN Returns Partial DataSQL Server:JOIN 返回部分数据
【发布时间】:2016-01-12 18:17:55
【问题描述】:

我要加入 4 个表,但在加入过程中,我只返回了 902 行中的大约 45 个电话号码。我知道这是无效的,并且应该包含至少 500 行左右的电话。我在加入时遗漏了一些非常简单的东西,我似乎无法识别。任何帮助表示赞赏。谢谢!

这是我的查询:

SELECT 
    CUST.ACCOUNTNUM,
    PARTYTABLE.NAME,
    '' AS 'LEGAL NAME',
    --replace(replace(DIRPARTYPOSTALADDRESSVIEW.ADDRESS, char(13), ' '), char(10), ' ') AS 'ADDRESS',
    '' AS 'ADDRESS 2',
    '' AS 'ADDRESS 3',
    LOGISTICSADDRESS.STREET,
    LOGISTICSADDRESS.CITY,
    LOGISTICSADDRESS.STATE,
    LOGISTICSADDRESS.COUNTY,
    LOGISTICSADDRESS.ZIPCODE,
    LOGISTICSADDRESS.COUNTRYREGIONID AS 'COUNTRY',
      CASE
        WHEN electronicaddress.type = 1
        THEN electronicaddress.locator
        ELSE 'NULL'
        END AS 'Phone',
     CASE 
        WHEN electronicaddress.type = 4
        THEN electronicaddress.locator
        ELSE 'NULL'
        END AS 'Fax',
     CASE WHEN electronicaddress.type = 20
        THEN electronicaddress.locator
        ELSE 'NULL'
        END AS 'Email',
    CUST.SALESGROUP AS 'BROKER NAME',
    '' AS 'DISTRIBUTOR'
FROM 
    CUSTTABLE CUST
LEFT JOIN 
    DIRPARTYTABLE AS PARTYTABLE ON CUST.PARTY = PARTYTABLE.RECID
LEFT JOIN 
    DIRPARTYPOSTALADDRESSVIEW AS POSTALADDRESS ON PARTYTABLE.RECID = POSTALADDRESS.PARTY
LEFT JOIN 
    LOGISTICSPOSTALADDRESS AS LOGISTICSADDRESS ON LOGISTICSADDRESS.PRIVATEFORPARTY = PARTYTABLE.RECID 
LEFT JOIN 
    LOGISTICSELECTRONICADDRESS AS ELECTRONICADDRESS ON PARTYTABLE.RECID = ELECTRONICADDRESS.PRIVATEFORPARTY
-- modify below to show NOT LIKE (not like '%A/P' go get all ship-to) or LIKE (contains '%A/P%' to get bill-to)
WHERE 
    PARTYTABLE.NAME NOT LIKE '%A/P%'
ORDER BY 
    CUST.ACCOUNTNUM

【问题讨论】:

    标签: sql-server sql-server-2008 join


    【解决方案1】:

    将过滤器移至ON 条件。这是隐式地将您的 LEFT OUTER JOIN 转换为 INNER JOIN

    ........
    LEFT JOIN DIRPARTYTABLE AS PARTYTABLE 
           ON CUST.PARTY = PARTYTABLE.RECID
          AND PARTYTABLE.NAME NOT LIKE '%A/P%'
    ........
    

    【讨论】:

      【解决方案2】:

      试试这个:

      FROM CUSTTABLE CUST
          LEFT JOIN DIRPARTYTABLE AS PARTYTABLE ON CUST.PARTY = PARTYTABLE.RECID
               AND PARTYTABLE.NAME NOT LIKE '%A/P%'
          LEFT JOIN DIRPARTYPOSTALADDRESSVIEW AS POSTALADDRESS ON PARTYTABLE.RECID = POSTALADDRESS.PARTY
          LEFT JOIN LOGISTICSPOSTALADDRESS AS LOGISTICSADDRESS ON LOGISTICSADDRESS.PRIVATEFORPARTY = PARTYTABLE.RECID 
          LEFT JOIN LOGISTICSELECTRONICADDRESS AS ELECTRONICADDRESS ON PARTYTABLE.RECID = ELECTRONICADDRESS.PRIVATEFORPARTY
      -- modify below to show NOT LIKE (not like '%A/P' go get all ship-to) or LIKE (contains '%A/P%' to get bill-to)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多