内部连接中的 OR 运算符

OR Operator in inner join

我有疑问。

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;

如何组合这两个查询。

像这样

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 

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

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 

虽然@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;