有两个表:
基础资料表: 区号 楼号 单元号 房号 姓名 登记日期
1 1 1 101 张 2005-5-1
2 2 2 202 李 2005-5-2 物业费表: 区号 楼号 单元号 房号 交费日期
1 1 1 101 2005-5-10 现在要分别查询出基础资料表已经交过物业费的住户和没有交过物业费的住户。
结果为:
已经交纳物业费的住户: 1 1 1 101
没有交纳物业费的住户: 2 2 2 202 请大家指点!
基础资料表: 区号 楼号 单元号 房号 姓名 登记日期
1 1 1 101 张 2005-5-1
2 2 2 202 李 2005-5-2 物业费表: 区号 楼号 单元号 房号 交费日期
1 1 1 101 2005-5-10 现在要分别查询出基础资料表已经交过物业费的住户和没有交过物业费的住户。
结果为:
已经交纳物业费的住户: 1 1 1 101
没有交纳物业费的住户: 2 2 2 202 请大家指点!
sql = select * from 基础表 where 区号 in(select 区号 from 物业表);
//你想显示哪些就把显示内容替换'*'
未交的:
sql = select * from 基础表 where 区号 not in(select 区号 from 物业表);
select A.区号, A.楼号, A.单元号, A.房号 FROM 基础资料表 AS A, 物业费表 AS B WHERE A.区号 = B.区号 AND A.楼号 = B.楼号 AND A.单元号 = B.单元号 AND A.房号 = B.房号
没注意,那就这样吧:
交了的:
sql = select * from 基础表,物业表 where 基础表.区号=物业表.区号 and 基础表.楼号=物业表.楼号 and 基础表.单元号=物业表.单元号 and 基础表.房号=物业表.房号;
未交的这样写
select a.区号,a.楼号,a.单元号,a.房号,a.姓名 ,a.登记日期 from 基础表 a,物业表 b where
(a.区号<>b.区号 or a.楼号<>b.楼号 or a.单元号<>b.单元号 or a.房号<>b.房号)
from 基础资料表
where 区号 +楼号+ 单元号+房号 in(select 区号 +楼号+ 单元号+房号 from 物业费表)
union select '已经交纳物业费的住户: 'as '交费情况',区号 楼号 单元号 房号
from 基础资料表
where 区号 +楼号+ 单元号+房号 not in(select 区号 +楼号+ 单元号+房号 from 物业费表)
select * from 基础资料表 a inner join 物业费表 b on a.区号=b.区号 and a.房间号=b.房间号未交的
select * from 基础资料表 a left out join 物业费表 b on a.区号=b.区号 and a.房间号=b.房间号
where b.区号 is null我感觉这样效率比较高
select 区号,楼号,单元号,房号
from 基础资料表 j
where exists ( select *
from 物业费表 w
where w.区号=j.区号 and
w.楼号=j.楼号 and
w.单元号=j.单元号 and
w.房号=j.房号 )--没有交纳物业费的住户
select 区号,楼号,单元号,房号
from 基础资料表 j
where not exists ( select *
from 物业费表 w
where w.区号=j.区号 and
w.楼号=j.楼号 and
w.单元号=j.单元号 and
w.房号=j.房号 )