查询一张表里和另一张表字段值相同的数据

jlcool 2009-05-01 08:38:46
有两张表,一张用户表A表,另一张表和用户表字段差不多B表,现在要求查询和B表的字段值相同的所有用户。可以是几个字段满足。满足字段越多靠前排。如果查询语句复杂的话,最好要支持分页。
...全文
800 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
plglenn 2009-05-04
  • 打赏
  • 举报
回复
up
wujinjian2008n 2009-05-04
  • 打赏
  • 举报
回复
select A.a,A.b from table1 A left join Table2 B on A.a=B.a and B.b and B.b
popcornwl 2009-05-04
  • 打赏
  • 举报
回复
漂过。。。。
liuping234232783 2009-05-04
  • 打赏
  • 举报
回复
select * from a inner join b on a.id=b.id
陌上花花 2009-05-03
  • 打赏
  • 举报
回复
学习了,帮顶下。
pt1314917 2009-05-03
  • 打赏
  • 举报
回复
--> 测试数据: @a
declare @a table (年龄 int,身高 int,学历 varchar(1))
insert into @a
select 12,170,'A' union all
select 11,150,'B' union all
select 10,160,'C'
--> 测试数据: @b
declare @b table (年龄1 int,年龄2 int,身高1 int,身高2 int,学历 varchar(1))
insert into @b
select 12,13,140,145,'B' union all
select 11,13,170,180,'a' union all
select 12,13,170,180,'A'

select a.* from @A a
where exists(select 1 from @b b where (年龄 between b.年龄1 and b.年龄2) or (身高 between b.身高1 and b.身高2) or b.学历=a.学历)
order by
(case when exists(select 1 from @b b where 年龄 between b.年龄1 and b.年龄2) then 1 else 0 end)+
(case when exists(select 1 from @b b where 身高 between b.身高1 and b.身高2) then 1 else 0 end)+
(case when exists(select 1 from @b b where b.学历=a.学历) then 1 else 0 end)
desc
pt1314917 2009-05-03
  • 打赏
  • 举报
回复
[code=SQL]
--上面有重复结果,改下:
select a.* from @A a
where exists(select 1 from @b b where (年龄 between b.年龄1 and b.年龄2) or (身高 between b.身高1 and b.身高2) or b.学历=a.学历)
order by
(case when exists(select 1 from @b b where 年龄 between b.年龄1 and b.年龄2) then 1 else 0 end)+
(case when exists(select 1 from @b b where 身高 between b.身高1 and b.身高2) then 1 else 0 end)+
(case when exists(select 1 from @b b where b.学历=a.学历) then 1 else 0 end)
desc

[/code]
pt1314917 2009-05-03
  • 打赏
  • 举报
回复

--改 下:
select a.* from a,b
where 年龄 between b.年龄1 and b.年龄2 or 身高 between b.身高1 and b.身高2 or b.学历=a.学历
order by
(case when (年龄 between b.年龄1 and b.年龄2) then 1 else 0 end)+
(case when (身高 between b.身高1 and b.身高2) then 1 else 0 end)+
(case when a.学历=b.学历 then 1 else 0 end)
desc
pt1314917 2009-05-03
  • 打赏
  • 举报
回复
select a.* from a left join b
where 年龄 between b.年龄1 and b.年龄2 or 身高 between b.身高1 and b.身高2 or b.学历=a.学历)
order by
(case when (年龄 between b.年龄1 and b.年龄2) then 1 else 0 end)+
(case when (身高 between b.身高1 and b.身高2) then 1 else 0 end)+
(case when a.学历=b.学历 then 1 else 0 end)
desc

jlcool 2009-05-02
  • 打赏
  • 举报
回复
软件自动顶
End 2009-05-02
  • 打赏
  • 举报
回复
select A.a,A.b from table1 A left join Table2 B on A.a=B.a and B.b and B.b
Garnett_KG 2009-05-02
  • 打赏
  • 举报
回复

select * from a
where exists
(
select * from b
where a.年龄 between 年龄1 AND 年龄2
and a.身高 between 身高1 AND 身高2
)
ORDER BY 100-
(
SELECT COUNT(*) FROM b
WHERE a.学历=b.学历
)
--假如还有其他字段
-
(
SELECT COUNT(*) FROM b
WHERE a.学历=b.学历
AND a.籍贯=b.籍贯
)
.....


jlcool 2009-05-02
  • 打赏
  • 举报
回复
不是简单的多表查询啊,看清楚我说什么了吗???

我的要求是这样的
a表字段
年龄 身高 学历

b表字段
年龄1 年龄2 身高1 身高2 学历

查询a表里的数据。要求:a表中的年龄在b表中的年龄1和年龄2之间。身高一样,学历相同,不用全部满足。满足越多排在越前面。
fangzhou2008 2009-05-02
  • 打赏
  • 举报
回复
select A.a,A.b from table1 A left join Table2 B on A.a=B.a and B.b and B.b
jlcool 2009-05-02
  • 打赏
  • 举报
回复
再顶!!!!!!!!!!!!
如果是数据库不合理要怎么改呢??
jlcool 2009-05-02
  • 打赏
  • 举报
回复
思路应该没问题。条件多的话排列组合那不得写很多?
cpp2017 2009-05-02
  • 打赏
  • 举报
回复
首先做个交叉关联,

select * from a ,b

order by case when A.年龄 >= B.年龄1 AND A.年龄<=B.年龄2 AND A.身高>= B.身高1

AND A.年龄 <= B.年龄2 AND A.学历 =B.学历 Then 0

ELSE CASE WHTN 更少的条件 then 1

else .......更少的条件 then 2


end
jlcool 2009-05-02
  • 打赏
  • 举报
回复
软件自动顶
llsen 2009-05-02
  • 打赏
  • 举报
回复
满足条件越多越靠前
那这样的话要用Union了吧

第一种sql全部满足
and and and

union all
第二种满足两个,但是第三个不满足(加这个条件是避免重复)

union all

第三种满足一个,另两个不满足


这样union下来不就是按照检索的顺序下来的
效果和你的排序就差不多了


但是第二种和第三种情况又要分开
这样好麻烦

热学沸腾56 2009-05-02
  • 打赏
  • 举报
回复
帮顶...
加载更多回复(11)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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