sql语句判断一张表的某字段为空,然后查找另外一张表的数据,怎么写?

两张一模一样的表a和b,字段id和name。现在要求查a表里面的数据,如果a里面没有此数据,则查b表里面的数据,这个怎么实现?我写了一个查name的,貌似不行:selec... 两张一模一样的表a和b,字段id和name。
现在要求查a表里面的数据,如果a里面没有此数据,则查b表里面的数据,这个怎么实现?
我写了一个查name的,貌似不行:
select case when id is null then (select name from b where id='10289')
else (select name from a where id='10289') end
from a
where id='10289'

请大家帮帮忙!
或者怎么判断一个数据存不存在于这个表内?
展开
 我来答
huangshuan1
2011-08-16 · TA获得超过391个赞
知道小有建树答主
回答量:749
采纳率:0%
帮助的人:360万
展开全部
楼上那个不行,应该是A没有再找B 而不是连接2个表一起找
楼主你的代码的问题出在when id is null 你都输入ID=10289了
id怎麼会空?
应该是
select case
when A.name is null then
B.name
else
A.name
end name
from (select name from a where id = '10289') A,(select name from b where id = '10289') B
追问
不行。。。查不出来
追答
select count(*) from a where id='10289'
0就是空 有數值就表示有多少數據
你把你的表跟你寫的那個都貼出來看看
怎麼會不行呢?最好是把表內的數據也貼出來看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xep0825
推荐于2018-03-14 · TA获得超过623个赞
知道小有建树答主
回答量:379
采纳率:100%
帮助的人:510万
展开全部
select top 1 name from(
select name, 1 as xh from a where id=10289
union all
select name, 2 as xh from b where id=10289
) order by xh
追问
您这样是把两张表合起来了,但是碰到比如两张表id都有10289的,就会出错了,我的意思如果a里面有10289的,就直接查出来,因为B里面也有可能有10289
追答
最外面那个select top 1 name 就是选择的,如果只有一个,那就是那一个,如果两个表都有10289,那么a表的序号是1,b表的序号是2,select top 1的话,根据序号排序,就是取a的了
select top 1 name from(
select name, 1 as xh from a where id=10289
union all
select name, 2 as xh from b where id=10289
)tmp order by xh
加了个tmp,sql2005测试通过,你执行下试试就知道了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jjlsky
2011-08-16 · TA获得超过283个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:227万
展开全部
select t.id,t.name from
( select id,name from a union select id,name from b) t
group by t.id,t.name

这样查询每个记录只会存在一条,这样查询出来的是最全的,不过不知道那个是A 表那个是B表的,它查询出来的是A.B的汇总,但是是唯一的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangzhiqing999
2011-08-16 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3293万
展开全部
select
case
when a.id is not null then a.name
else b.name end
from
a FULL JOIN b ON (a.id = b.id )
where
a.id='10289' OR b.id='10289'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuchor
2011-08-16 · 超过34用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:106万
展开全部
你的case when 后面的字段错了 应该是name 下面的才是正确的

select
case when name is null then (select name from b where id='10289')
else (select name from a where id='10289') end
from a
where id='10289'
更多追问追答
追问
我试了下您写的,不行。。。。
追答
我知道了 你肯定是name在a表里面是空但不是null 你把case when name is null 换成
case when name =‘’来试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式