代码之家  ›  专栏  ›  技术社区  ›  grega g

SQL Server联接和WHERE语句不工作

  •  0
  • grega g  · 技术社区  · 5 年前

    我有这个SQL Server语句,我不确定它为什么不返回任何记录:

    SELECT 
        contacts.firstname , 
        contacts.lastname , 
        contacts.address1 , 
        contacts.city, 
        contacts.zip, 
        countries.title AS countrytitle, 
        states.title AS statetitle 
    FROM providers, payableinvoices, contacts 
    LEFT JOIN countries ON countries.countryid=contacts.countryid 
    LEFT JOIN states ON states.stateid=contacts.stateid 
    WHERE payableinvoices.payableinvoiceid=4 
    AND providers.providerid=payableinvoices.providerid 
    AND providers.contactid=contacts.contactid"
    

    简单地说,我有以下表格:

    • contacts表:其列包括contactid、firstname、firstname、address1、city、zip
    • providers表:其列包括providerID、contactID
    • payableinvoices表:其列包括payableinvoiceid、providerid

    因此,它只是简单地将主键和外键链接在一起,以获取与“payableinvoiceid”对应的“必需”字段,该字段已分配了一个提供者。

    请帮忙。谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   AdaTheDev    14 年前

    我要做的第一件事是在整个过程中使用连接的标准化:

    SELECT 
        contacts.firstname , 
        contacts.lastname , 
        contacts.address1 , 
        contacts.city, 
        contacts.zip, 
        countries.title AS countrytitle, 
        states.title AS statetitle 
    FROM providers
        INNER JOIN payableinvoices ON providers.providerid=payableinvoices.providerid 
        INNER JOIN contacts ON providers.contactid=contacts.contactid
        LEFT JOIN countries ON countries.countryid=contacts.countryid 
        LEFT JOIN states ON states.stateid=contacts.stateid 
    WHERE payableinvoices.payableinvoiceid=4 
    

    我觉得上面的内容不错。

    如果您没有获得预期返回的行,则需要从基本的“Select…From Providers”开始,例如:

    • 从基本的“从提供者中选择…”
    • 将内部联接添加到PayableInvoices…测试
    • 添加Where条件…测试 等

    所以你很快就会发现排在哪里被排除了。

        2
  •  1
  •   Kyle Rozendo    14 年前

    尝试使用:

    SELECT 
        C.FirstName , 
        C.LastName , 
        C.Address1 , 
        C.City, 
        C.Zip, 
        CO.Title AS CountryTitle, 
        S.Title AS StateTitle 
    FROM Contacts C
    INNER JOIN Providers P ON P.ContactID = C.ContactID
    INNER JOIN PayableInvoices PI ON PI.ContactID = P.ContactID
    LEFT JOIN Countries CO ON CO.CountryID = C.CountryID 
    LEFT JOIN States S ON S.StateID = C.StateID
    WHERE PI.PayableInvoiceID = 4