如何编写sql语句?

fuchit 2010-12-06 07:08:20
有一人口图标管理系统,其中有两张表。第一张表是房主信息,存有每套房屋的户主信息。第二章表是实有人员信息,存有每套房屋居住人员情况。由于房屋有可能是自主、出租、借助或者是长辈的,所以户主信息和实有居住人员可能相同也可能不同。
举例如下:
table1
小区名称 楼号 房号 房主姓名 身份证号码 电话
阳光小区 1 101 王二 3323232 232324
月亮小区 2 101 胡三 34343 3434343
月亮小区 1 202 张飞 34334 243434

table2
序号 小区名称 楼号 房号 居住人员 身份证号码 电话
1 阳关小区 1 101 王二 3323232 232324
2 阳光小区 1 101 王四 33434 2323
3 月亮小区 2 101 胡三 34343 3434343
4 翡翠城小区 1 101 梅花 333 33333
相同要求表一中出现的房屋在表二中必须出现,也就是说表一中的房屋在表二中要有居住人员信息。同时表二中出现的房屋信息在表一中也必须要有该房屋的房主信息。

请问:
1、如何用SQL语句查处表一中出现的房屋信息而表二中没有出现。本例中查出结果为月亮小区1号楼202.
2、如何用sql语句查出表二中出现的房屋而表一中没有该房屋信息。本例中查出结果为翡翠城小区1号楼101.

谢谢了。
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuchit 2010-12-07
  • 打赏
  • 举报
回复
是单位自己做的系统,这样改起来方便。不过由于不够完善,所以需要查出一些错误信息等。说明:系统不是我做的,水平不够。
iqlife 2010-12-06
  • 打赏
  • 举报
回复
警察还有什么系统要自己做?》
不是都外包了?
fuchit 2010-12-06
  • 打赏
  • 举报
回复
楼上的,对
iqlife 2010-12-06
  • 打赏
  • 举报
回复
楼主头像不错,是警察?
  • 打赏
  • 举报
回复
1、
with tb1 as(
select '阳光小区' 小区名称,1 楼号,101 房号,'王二' 房主姓名,
3323232 身份证号码,232324 电话 from dual union all
select '月亮小区', 2, 101, '胡三', 34343, 3434343 from dual union all
select '月亮小区', 1, 202, '张飞', 34334, 243434 from dual),
tb2 as(
select 1 序号,'阳关小区' 小区名称,1 楼号,101 房号,'王二' 居住人员,
3323232 身份证号码,232324 电话 from dual union all
select 2, '阳光小区', 1 ,101 ,'王四', 33434, 2323 from dual union all
select 3, '月亮小区', 2, 101 ,'胡三', 34343, 3434343 from dual union all
select 4, '翡翠城小区', 1, 101, '梅花', 333, 33333 from dual)
--以上为提供数据的语句
select * from tb1
where not exists(select 1 from tb2
where tb1.小区名称=tb2.小区名称 and tb1.楼号=tb2.楼号
and tb2.房号=tb1.房号)

小区名称 楼号 房号 房主 身份证号码 电话
-------- ---------- ---------- ---- ---------- ----------
月亮小区 1 202 张飞 34334 243434

2、
select * from tb2
where not exists(select 1 from tb1
where tb1.小区名称=tb2.小区名称 and tb1.楼号=tb2.楼号
and tb2.房号=tb1.房号)

序号 小区名称 楼号 房号 居住 身份证号码 电话
--------- ---------- ---------- ---------- ---- ---------- ----------
1 阳关小区 1 101 王二 3323232 232324
4 翡翠城小区 1 101 梅花 333 33333

tangren 2010-12-06
  • 打赏
  • 举报
回复
--上面使用exists,也可以使用in
--1
SELECT *
FROM table1 a
WHERE (a.小区名称, a.楼号, a.房号) NOT IN (SELECT b.小区名称, b.楼号, b.房号 FROM table2 b);
--2
SELECT DISTINCT 小区名称, 楼号, 房号
FROM table2 a
WHERE (a.小区名称, a.楼号, a.房号) NOT IN (SELECT b.小区名称, b.楼号, b.房号 FROM table1 b);
tangren 2010-12-06
  • 打赏
  • 举报
回复
--1
select * from table1 a where not exists(select 1 from table2 b where b.小区名称=a.小区名称 and b.楼号=a.楼号 and b.房号=a.房号);
--2
select distinct 小区名称,楼号,房号 from table2 a where not exists(select 1 from table1 b where b.小区名称=a.小区名称 and b.楼号=a.楼号 and b.房号=a.房号);

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧