请高手指教一下!谢了

时间:2022-01-22 19:45:17
有两张表,一张表为table_1,另外一张表为table_2。
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


引用 1 楼 acherat 的回复:
SQL code


select *
from table2 t
where not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)


up

#6


引用 4 楼 likly993 的回复:
你好!table_1没有购买者基本信息,只有这套房屋的属性。只是table_2的房屋id和table_1的房屋id是一致的。这样才能把table_2表中的购买者信息与table_1表中的房屋信息相关联起来。比如:张三购买了一套房屋,这房屋所在的位置在那里,这房屋的楼盘名称是什么,就可以通过这两张表知道张三购买这套房屋的所有信息。其中张三是在table_2中的信息,房屋所在的位置在那里,这房屋的楼盘……
 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.姓名)



#10


引用 9 楼 likly993 的回复:
能说明一下条件后的这条语句是什么意思吗? 
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)

就是如果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


引用 1 楼 acherat 的回复:
SQL code


select *
from table2 t
where not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)


up

#6


引用 4 楼 likly993 的回复:
你好!table_1没有购买者基本信息,只有这套房屋的属性。只是table_2的房屋id和table_1的房屋id是一致的。这样才能把table_2表中的购买者信息与table_1表中的房屋信息相关联起来。比如:张三购买了一套房屋,这房屋所在的位置在那里,这房屋的楼盘名称是什么,就可以通过这两张表知道张三购买这套房屋的所有信息。其中张三是在table_2中的信息,房屋所在的位置在那里,这房屋的楼盘……
 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.姓名)



#10


引用 9 楼 likly993 的回复:
能说明一下条件后的这条语句是什么意思吗? 
not exists (select 1 from table2 where 房屋id = t.房屋id and 姓名 > t.姓名)

就是如果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)