日期:2014-05-17  浏览次数:20645 次

求解SQL语句问题,我sql弱爆了

SELECT A.house_addr,A.scode,A.SQ_ID,A.stype,A.fzxm,A.fzdh,A.fzsfz,ROW_NUMBER() OVER(ORDER BY A.id) AS id,A.person_count FROM 
(
SELECT tbh.house_addr,tbh.scode,tbh.SQ_ID,tbh.stype,tbh.fzxm,tbh.fzdh,tbh.fzsfz,tbh.id,tbh.person_count
FROM t_BaseHouse tbh
WHERE
tbh.house_addr IN (SELECT tbh2.house_addr FROM t_BaseHouse tbh2 GROUP BY tbh2.house_addr HAVING COUNT(tbh2.house_addr)=1)
--((SELECT COUNT(*) FROM t_BaseHouse tbh2 WHERE tbh.house_addr = tbh2.house_addr)>2)
) A
RIGHT JOIN 
(
SELECT DISTINCT(tbh2.house_addr) FROM
t_BaseHouse tbh2 INNER JOIN v_user u2 
ON u2.sq_id = tbh2.SQ_ID 
WHERE tbh2.last_checker IS  NULL  
) B
ON B.house_addr = A.house_addr
WHERE A.person_count IS  NULL 
GO


得出的结果有NULL值,。。。请问哪里出问题了?如下图:

------解决方案--------------------
说明B.house_addr = A.house_addr没有匹配的数据 。
------解决方案--------------------
ON (B.house_addr = A.house_addr and B.house_addr is not null)
------解决方案--------------------
试试这个:
ON B.house_addr = A.house_addr AND A.person_count IS  NULL
------解决方案--------------------
引用:
说明B.house_addr = A.house_addr没有匹配的数据 。

没有匹配不是也应该返回B表的行吗?B表所有行都是有数据的啊。
------解决方案--------------------
引用:
ON (B.house_addr = A.house_addr and B.house_addr is not null)


引用:
试试这个:
ON B.house_addr = A.house_addr AND A.person_count IS  NULL


楼上2位的方法都试过了。还是会出现330条空记录。331之后都正常。
------解决方案--------------------
看不到具体的数据,也不知道你逻辑。
有left join可以吗?试试看吧。
也有可能2个子查询的结果进行right join就是这样的结果
------解决方案--------------------
 
这个条件放到 on之后
 A.person_count IS  NULL