Sql 总是包含空记录的左连接

Sql 总是包含空记录的左连接,sql,oracle,join,null,left-join,Sql,Oracle,Join,Null,Left Join,我使用的是oracle11gr2,我试图编写一个查询,返回两个表中的地址数据,CUSTOMERS和LOCATIONS。给定的客户可能(也可能不)有不同的位置,每个位置都有自己的地址 我想返回每个客户的地址,以及他们的所有位置。例如,如果表包含以下数据: 问题是,当客户确实有位置时,它不会为位置数据返回一个带有空值的行,因此我不会在客户表中得到一个带有地址的行。它给了我这样的东西: CUSTOMERS CUSTOMER_ID ADDRESS 1 "New York"

我使用的是
oracle11gr2
,我试图编写一个查询,返回两个表中的地址数据,
CUSTOMERS
LOCATIONS
。给定的客户可能(也可能不)有不同的位置,每个位置都有自己的地址

我想返回每个客户的地址,以及他们的所有位置。例如,如果表包含以下数据:

问题是,当客户确实有位置时,它不会为位置数据返回一个带有空值的行,因此我不会在
客户
表中得到一个带有地址的行。它给了我这样的东西:

CUSTOMERS CUSTOMER_ID ADDRESS 1 "New York" 2 "California"

LOCATIONS CUSTOMER_ID LOCATION_ID ADDRESS 1 1 "New Jersey"
但它给了我与第一个查询相同的结果。即使联接条件中存在匹配项,是否有方法为第二个表返回空记录?

此处根本不需要联接:

SELECT 
 CUSTOMERS.CUSTOMER_ID,
 LOCATIONS.LOCATION_ID,
 NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
 LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID)

您可以尝试完全外部联接。例如:

CUSTOMER_ID LOCATION_ID ADDRESS 1 1 "New Jersey" 2 "California"
如果即使在不匹配的情况下也要联接这两个表,则需要在联接的列上使用
is NULL

比如说

SELECT 
 CUSTOMERS.CUSTOMER_ID,
 LOCATIONS.LOCATION_ID,
 NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
 LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID OR LOCATIONS.CUSTOMER_ID IS NULL)


这将返回带有
NULL

的结果,在customerID和addressDoh上尝试完全外部联接。我觉得我错过了一些简单的事情。谢谢。@Mike:不客气。如果有用的话,请不要忘记更新此帖子并将其标记为已接受。这将给出与我第一次查询相同的结果(在客户中没有匹配客户的位置没有记录)。
SELECT 
 CUSTOMERS.CUSTOMER_ID,
 LOCATIONS.LOCATION_ID,
 NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
 LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID OR LOCATIONS.CUSTOMER_ID IS NULL)
SELECT  customer_id, NULL AS location_id, address
FROM    customers
UNION ALL
SELECT  customer_id, location_id, address
FROM    locations
SELECT    
CUSTOMERS.CUSTOMER_ID,   
LOCATIONS.LOCATION_ID,   
NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS             
FROM  CUSTOMERS   
  FULL OUTER JOIN  LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID)
Table 1:
CustomerID
CustomerName
Table 2:
CustomerID
CustomerEmail
Select,
CustomerID,
CustomerName,
ISNULL (CustomerEmail, NULL) AS CustomerEmail


FROM table1

LEFT JOIN table2
ON table1.CustomerID = table2.CustomerID