sql查询时,根据特定的条件给表的某一个字段赋值
先讲一下需要这个需求的情景:
这是一个招聘求职项目遇到的一个问题。个人A向公司B的职位投递简历后,公司B会收到个人A的简历;但是A投递后把简历删除,公司收到的简历信箱
还有这个简历,但却不能看了。
原因:B收到的简历放在表[ResumeRecord]里,当B想看A的简历时会去表[Resume]查询(A已经把自己的简历删了,所以找不到了)
针对这一情况,我想到了两种方法:
1.A删除自己的简历时,同时把自己的投递记录删除;
2.完善B收收到的简历信箱列表。当A把自己的简历删除后,B只能看这条记录,不能看A的详细信息。在这条记录旁给出【此简历已被该用户删除】的注释;
接下来分析一下这两种方法,方法一虽然能解决程序的异常问题,但是对于B是不公平了。(A删除之前是可以看的,删除后怎么就没有了呢?会不会很怪。)
所以果断采取方法二。实现方法二有两种方式,一是在查询记录的时候,对每一条记录查询一次,查看这条记录的简历是否存在(效率慢了),二是写成一个sql
查询。
select top 15 * from
(
select
'Note'= case when b.ID IS NULL then '此简历已被该用户删除' else '' end,
a.ID, a.[Type], a.UserId, a.SubjectId, a.AreaId, a.CompanyId, a.ResumeId, a.SpendType, a.UpdateTime,
a.CreatTime, a.Remark, a.AreaPid, a.SubjectPid, a.IsEmailPost, row_number() over (order by a.ID Desc) as r
from [ResumeRecord] a
left join [Resume] b
on a.ResumeId = b.ID
where ( type= 2 or type= 1 ) and CompanyId=158732
) t
where t.r>0 order by t.ID Desc
这个sql可以查出想要的结果,但是当时用的是封装好的实体(这里就不细说了),所以到控制器里却无法取出自定义字段[Note]的值。
于是就想到把对得出的值赋到表[ResumeRecord]的Remark字段,前提是当时的情景没有用到[Remark]这个字段。所以使用其他闲的
字段也可以,字段类型最好与得出的值类型一样,这才是本篇的重点。
select top 15 * from
(
select
(
case when b.ID IS NULL then '此简历已被该用户删除' else '' end) as Remark,
a.ID, a.[Type], a.UserId, a.SubjectId, a.AreaId, a.CompanyId, a.ResumeId, a.SpendType, a.UpdateTime,
a.CreatTime, a.AreaPid, a.SubjectPid, a.IsEmailPost, row_number() over (order by a.ID Desc) as r
from [ResumeRecord] a
left join [Resume] b
on a.ResumeId = b.ID
where ( type= 2 or type= 1 ) and CompanyId=158732
) t
where t.r>0 order by t.ID Desc
最终搞定。
sql查询时,根据特定的条件给表的某一个字段赋值的更多相关文章
- oracle中使用sql查询时字段为空则赋值默认
转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...
- 在数据表中添加一个字段的SQL语句怎么写
如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识. 通用式: alter table [表名] add [字段名] 字 ...
- sql查询调优之where条件排序字段以及limit使用索引的奥秘
奇怪的慢sql 我们先来看2条sql 第一条: select * from acct_trans_log WHERE acct_id = 1000000000009000757 order b ...
- sql查询时增加自动编号和分页
查询时加序号 a:没有主键的情形: ,) as iid,* into #tmp from TableName Select * from #tmp Drop table #tmp b:有主键的情形: ...
- SQL查询时踩得一些坑
1.左右连接: left join:LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替. inner join: 内连接是最 ...
- SQL查询时,根据日期范围查询周
周数据会有weekbegin和weekend两个字段,用来描述周的开始日期和结束日期. 现在项目中的日历控件不支持周查询,只支持日期查询,所以目前面临的问题是,根据时间范围,查询周. 最终sql如下: ...
- sql查询结果集根据指定条件排序的方法
oracle认为 null 最大. 升序排列,默认情况下,null值排后面. 降序排序,默认情况下,null值排前面. 有几种办法改变这种情况: (1)用 nvl 函数或decode 函数 将null ...
- mysql 怎么通过sql语句批量去掉某一个表中某一个字段的多余字符
采用替换,把”<img src="“替换为空格," width="300" height="300" />也替换为空格,曾经在网 ...
- mysql通过sql语句如何批量去掉某一个表中某一个字段的下面的相同部分字符串
今天用Excel导入的数据中,前面包含` 批量去除 UPDATE sheet2 set total=replace(total,'`','');
随机推荐
- 上课总结-数据结构c++
class 1 数据结构就是指 按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合. 例1.煤气管道的铺设问题.如图需为城市的各小区之间铺设煤气 ...
- HDU6308-2018ACM暑假多校联合训练1011-Time Zone
题目大意就是给你UTC-8时区的时间 让你求对应时区的时间 哇 这个题 看似简单,但是一开始怎么都过不了啊 同学用自己写的read过了,后来看了一下各位大佬说改成分钟随便过,就随便过了 Problem ...
- 滴滴插件化方案 VirtualApk 源码解析
那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...
- 190225Redis
一.Redis的简单使用 Redis操作模式 # Author:Li Dongfei import redis r = redis.Redis(host='192.168.56.7', port=63 ...
- 在Ninject 向构造参数中注入具有相同类型的参数
实际上这个有多种解决方法,加自定义Attribute,或Named(),但这些方式有一些侵入性,Named,要引用Ninject, 自定义Attribute,还要还要再写几行代码吗,所以使用下面的方法 ...
- js 的常用选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Httprequest 添加Cookie
string postData = "Inputs={\"BarCode\":\"" + barCode + "\"}" ...
- ubuntu16.04 chromium浏览器无法启动
点击浏览器不能启动,在终端输入: chromium -browser %U 错误如下: [/)] NSS_VersionCheck("3.26") failed. NSS > ...
- 添加win10激活工具
其实我们可以随便准备一个win10的激活密钥激活! 以管理员的身份进入到CMD下.. slmgr.vbs /upk 清除掉旧的slmgr /ipk W269N-WFGWX ...
- 理解Javascript_02_执行上下文02
上一篇我们讲到在全局环境下的代码段中,执行上下文环境中如何处理数据: 变量.函数表达式——变量声明,默认赋值为undefined: this——赋值: 函数声明——赋值: 这篇文章讲关于函数执行上下文 ...