【问题标题】:OR Operator in inner join内部连接中的 OR 运算符
【发布时间】:2015-07-23 17:55:36
【问题描述】:

我有疑问。

SELECT  VendorID,VendorName,VendorType,FirstName,LastName,
  VendorCompany,Contact,Phone,AltContact,Email,OpeningBalance,OpeningDate,VendorAccountNo ,Photo,VendorNotes FROM 
  Vendor inner JOIN VendorTypeTable ON Vendor.VendorTypeID=VendorTypeTable.VendorTypeID

现在另一方面,我还想检索那些 VendorTypeID 为空的供应商,就像这个查询一样。

SELECT  VendorID,VendorName,FirstName,LastName,
 VendorCompany,Contact,Phone,AltContact,Email,OpeningBalance,OpeningDate,VendorAccountNo ,Photo,VendorNotes FROM 
Vendor WHERE VendorTypeID IS NULL;

如何组合这两个查询。

【问题讨论】:

    标签: sql subquery inner-join


    【解决方案1】:

    虽然@Fireblade 绝对正确,但如果您有两个返回相同字段的查询,有时 UNION 是正确的答案。这使您可以独立地调整彼此的性能。

    SELECT  VendorID,VendorName,VendorType,FirstName,LastName,  
    VendorCompany,Contact,Phone,AltContact,Email,
    OpeningBalance,OpeningDate,VendorAccountNo ,Photo,VendorNotes FROM 
    Vendor inner JOIN VendorTypeTable ON 
    Vendor.VendorTypeID=VendorTypeTable.VendorTypeID
    UNION
    SELECT  VendorID,VendorName,FirstName,LastName, VendorCompany,
    Contact,Phone,AltContact,Email,OpeningBalance,OpeningDate,
    VendorAccountNo ,Photo,VendorNotes FROM 
    Vendor WHERE VendorTypeID IS NULL;
    

    【讨论】:

    • 你说得对。它可以工作,但不能完全满足我的要求。我需要 VendorID、VendorName、VendorType 其中 VendorType 字段来自 VendorTypeTable 所以,需要加入。但是 Join 不会返回 VendorTypeID 为 null 的那些记录。
    【解决方案2】:

    类似的东西

    SELECT vendorid, 
           vendorname, 
           vendortype, 
           firstname, 
           lastname, 
           vendorcompany, 
           contact, 
           phone, 
           altcontact, 
           email, 
           openingbalance, 
           openingdate, 
           vendoraccountno, 
           photo, 
           vendornotes 
    FROM   vendor 
           INNER JOIN vendortypetable 
                   ON vendor.vendortypeid = vendortypetable.vendortypeid 
                       OR vendor.vendortypeid IS NULL 
    

    【讨论】:

    • 它没有给出正确的结果。多次重复记录,由于加入,vendorTypeID 为 NULL
    • @A.RShaib - 在这种情况下,您可以添加示例数据和预期输出
    • 谢谢我正在使用 UNION 。
    • @A.RShaib - 然后您需要通过选择他的答案左侧的勾号将 John's Union 查询标记为 Answer
    【解决方案3】:

    你也可以像这样使用左外连接

    SELECT vendorid, 
           vendorname, 
           vendortype, 
           firstname, 
           lastname, 
           vendorcompany, 
           contact, 
           phone, 
           altcontact, 
           email, 
           openingbalance, 
           openingdate, 
           vendoraccountno, 
           photo, 
           vendornotes 
    FROM   vendor 
           left outer JOIN vendortypetable 
                   ON vendor.vendortypeid = vendortypetable.vendortypeid 
    

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 2013-03-19
      • 1970-01-01
      • 2014-06-10
      • 2010-10-23
      • 2016-07-08
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多