2014-10-17 78 views
0

我想在TABLEA下面的查询,其中表B是空的,记录条件对左连接

--This query fetched no records 
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN TABLEB 
ON TABLEA.ID=TABLEB.ID 
WHERE TABLEB.COL1<>'XYZ' 

--This query fetched records . 
SELECT COL1 FROM 
(
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN TABLEB 
ON TABLEA.ID=TABLEB.ID 
)A WHERE COL1 <>'XYZ' 

你能帮我,为什么第一次查询didnt返回任何记录,虽然它们看起来一样。我对第一个查询的理解是“我做了一个左连接,所以如果记录不存在于tableb中,它应该被替换为NULL值。作为NULL <>'xyz'所有记录都应该被提取正确..

回答

0

放置WHERE如果外部表中没有满足条件的行,那么不会返回任何行。

解决方案然后是在一个外部连接的外部连接表上,将该连接有效地表示为内部连接。在上面的例子中,这就像将WHERE更改为AND一样简单

必须被放置在WHERE子句中的是测试NULL,即所谓的排除连接 - 即.e.当你真的想要返回逆设置。