table_1表中有记录一套房屋的基本信息。比如,字段有:房屋id(a)房屋所在的楼盘项目名称(b),楼盘所在地址(c),楼盘所属开发商(d)....等字段。
table_2表中有记录购买这一套房屋的购买者基本信息。比如,字段有:房屋id(a),购房者姓名(d)....等字段
现有如下问题:
table_2表中有出现两人购买一套房屋的数据(例如夫妻两人共同买一套房屋)。都是说两人购买的房屋id相同,对应的table_1表中的房屋id。只是table_2中两人的姓名不同,性别不同,所以要分两条记录保存在table_2表中而已。
但是实际上这两人的房屋id是对应的table_1中的一条记录房屋id。
现我希望在查询的时候,出现这样相类似的记录的话,只显示一条房屋id记录。不希望一条房屋id记录,因table_2中两人的不同信息,而查询出来两条记录。
不知道我说清楚了没?
谢谢各位SQL高手帮我解答一下。再次谢了!
11 个解决方案
#1
select *
from table2 t
where not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
#2
补充一下。table_1和table_2无关联。
如果用视图的话,如何建立关联。才能查询以上我想要的结果集呢?
如果用视图的话,如何建立关联。才能查询以上我想要的结果集呢?
#3
不太清楚,但是如果查询结果列全部是table1里面的东西的话,那用一个distinct就搞定了啊
#4
你好!table_1没有购买者基本信息,只有这套房屋的属性。只是table_2的房屋id和table_1的房屋id是一致的。这样才能把table_2表中的购买者信息与table_1表中的房屋信息相关联起来。比如:张三购买了一套房屋,这房屋所在的位置在那里,这房屋的楼盘名称是什么,就可以通过这两张表知道张三购买这套房屋的所有信息。其中张三是在table_2中的信息,房屋所在的位置在那里,这房屋的楼盘名称是什么是在table_1表中的信息。
#5
up
#6
LZ。如果就像你说的是一对夫妻共同买一套房子。那table_2中就会有两条对应房屋ID的信息。那你要显示哪个人的资料,如果显示两个人的资料。那么房屋的信息肯定会有两条了
#7
就是想table_2中只有一条房屋id对应table_1中的房屋id。另外一条都不显示出来
#8
楼主有没试试1楼的,如果和表和字段不匹配,改动下,修改成楼主的表和字段,意思是那样。
#9
能说明一下条件后的这条语句是什么意思吗?
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
#10
就是如果table_2表如果有多条记录对应同一个房屋id,那么只取姓名最大的那一条记录,其他过滤掉,
这样table_1表和table_2表相当于一对一的关系了
#11
create table table_1
(a int,b nvarchar(50),c nvarchar(100),d nvarchar(50))
--房屋id(a),房屋所在的楼盘项目名称(b),楼盘所在地址(c),楼盘所属开发商(d)
insert table_1
select 1,'楼盘项目1','楼盘地址1','开发商1' union all
select 2,'楼盘项目2','楼盘地址2','开发商2' union all
select 3,'楼盘项目3','楼盘地址3','开发商3'
create table table_2
(a int,d nvarchar(50),e nvarchar(10),f int)
--房屋id(a),购房者姓名(d),性别(e),年龄(f)
insert table_2
select 1,'小黄','男',52 union all
select 2,'小牛','男',40 union all
select 2,'牛嫂','女',38 union all
select 3,'小辉','男',32
;with T as (select Row_number()over(partition by a order by e) as num,* from table_2)
select t1.a as 房屋id,t1.d as 购房者姓名,t1.e as 性别,t1.f as 年龄,
t2.b as 房屋所在的楼盘项目名称,t2.c as 楼盘所在地址,t2.d as 楼盘所属开发商
from T as t1 join table_1 as t2 on t1.a=t2.a where num=1
--房屋id 购房者姓名 性别 年龄 房屋所在的楼盘项目名称 楼盘所在地址 楼盘所属开发商
------------- ------------- ---------- ----------- ------------------------- ----------- ------------------
--1 小黄 男 52 楼盘项目1 楼盘地址1 开发商1
--2 小牛 男 40 楼盘项目2 楼盘地址2 开发商2
--3 小辉 男 32 楼盘项目3 楼盘地址3 开发商3
--
--(3 row(s) affected)
#1
select *
from table2 t
where not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
#2
补充一下。table_1和table_2无关联。
如果用视图的话,如何建立关联。才能查询以上我想要的结果集呢?
如果用视图的话,如何建立关联。才能查询以上我想要的结果集呢?
#3
不太清楚,但是如果查询结果列全部是table1里面的东西的话,那用一个distinct就搞定了啊
#4
你好!table_1没有购买者基本信息,只有这套房屋的属性。只是table_2的房屋id和table_1的房屋id是一致的。这样才能把table_2表中的购买者信息与table_1表中的房屋信息相关联起来。比如:张三购买了一套房屋,这房屋所在的位置在那里,这房屋的楼盘名称是什么,就可以通过这两张表知道张三购买这套房屋的所有信息。其中张三是在table_2中的信息,房屋所在的位置在那里,这房屋的楼盘名称是什么是在table_1表中的信息。
#5
up
#6
LZ。如果就像你说的是一对夫妻共同买一套房子。那table_2中就会有两条对应房屋ID的信息。那你要显示哪个人的资料,如果显示两个人的资料。那么房屋的信息肯定会有两条了
#7
就是想table_2中只有一条房屋id对应table_1中的房屋id。另外一条都不显示出来
#8
楼主有没试试1楼的,如果和表和字段不匹配,改动下,修改成楼主的表和字段,意思是那样。
#9
能说明一下条件后的这条语句是什么意思吗?
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)
#10
就是如果table_2表如果有多条记录对应同一个房屋id,那么只取姓名最大的那一条记录,其他过滤掉,
这样table_1表和table_2表相当于一对一的关系了
#11
create table table_1
(a int,b nvarchar(50),c nvarchar(100),d nvarchar(50))
--房屋id(a),房屋所在的楼盘项目名称(b),楼盘所在地址(c),楼盘所属开发商(d)
insert table_1
select 1,'楼盘项目1','楼盘地址1','开发商1' union all
select 2,'楼盘项目2','楼盘地址2','开发商2' union all
select 3,'楼盘项目3','楼盘地址3','开发商3'
create table table_2
(a int,d nvarchar(50),e nvarchar(10),f int)
--房屋id(a),购房者姓名(d),性别(e),年龄(f)
insert table_2
select 1,'小黄','男',52 union all
select 2,'小牛','男',40 union all
select 2,'牛嫂','女',38 union all
select 3,'小辉','男',32
;with T as (select Row_number()over(partition by a order by e) as num,* from table_2)
select t1.a as 房屋id,t1.d as 购房者姓名,t1.e as 性别,t1.f as 年龄,
t2.b as 房屋所在的楼盘项目名称,t2.c as 楼盘所在地址,t2.d as 楼盘所属开发商
from T as t1 join table_1 as t2 on t1.a=t2.a where num=1
--房屋id 购房者姓名 性别 年龄 房屋所在的楼盘项目名称 楼盘所在地址 楼盘所属开发商
------------- ------------- ---------- ----------- ------------------------- ----------- ------------------
--1 小黄 男 52 楼盘项目1 楼盘地址1 开发商1
--2 小牛 男 40 楼盘项目2 楼盘地址2 开发商2
--3 小辉 男 32 楼盘项目3 楼盘地址3 开发商3
--
--(3 row(s) affected)