SQL判断如果为空就查询另外一个表

zhangzhen_927116 2011-05-26 02:06:11
如题,

select id,mian from Table_1
select id,mian from Table_2


1 但是复苏的
2
3 Delphi
4


1 dsf
2 adfv
3 ouio
4 vbnm

想要得到

1 但是复苏的
2 adfv
3 Delphi
4 vbnm


看资料写了一个不对
select id,isnull(select Table_1.mian from Table_2 where Table_1.id=Table_2.id)mian from Table_1
...全文
1453 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhen_927116 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hlf1989 的回复:]
SQL code
--@@rowcount=0 相当于查询语句没有返回零行
SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND WO='1103046' AND B.TAXUP > 0 ……
[/Quote]
为什么会有两个值呢 ? 不是那天有记录就执行那条嘛?
hlf1989 2011-05-27
  • 打赏
  • 举报
回复
--@@rowcount=0 相当于查询语句没有返回零行
SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND WO='1103046' AND B.TAXUP > 0 order by B.DATETIME desc

if @@rowcount=0

SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND B.TAXUP > 0 order by B.DATETIME desc

if @@rowcount=0
select TOP 1 TAXUP,DATETIME from VQUT WHERE CODE='EOJ00000700' order by DATETIME desc
zhangzhen_927116 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhangzhen_927116 的回复:]
SQL code

SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND WO='1103046' AND B.TAXUP > 0 order by B.DATETIME desc
……
[/Quote]
这个怎么写?输出TAXUP 如果第一个条件没结果就执行下条语句,如果还没有再执行下条语句
rocklicong 2011-05-26
  • 打赏
  • 举报
回复
select *from (

select id,mian from #t1 where mian is not null and mian<>''
union
select id,mian from #t2 where id in (select id from #t1 where mian is null or mian='')

) a order by id

1 但是复?的
2 adfv
3 Delphi
4 vbnm
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
输出 TAXUP
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复

SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND WO='1103046' AND B.TAXUP > 0 order by B.DATETIME desc

SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE='EOJ00000700' AND B.TAXUP > 0 order by B.DATETIME desc

select TOP 1 TAXUP,DATETIME from VQUT WHERE CODE='EOJ00000700' order by DATETIME desc

我还是按照那种方法写不出来。
如果第一条SQL没结果那么就执行第二条,如果第二条没有结果就执行第三条。
hlf1989 2011-05-26
  • 打赏
  • 举报
回复
说明无论Table_1.mian为null或空串时都将被Table_2.mian替换
hlf1989 2011-05-26
  • 打赏
  • 举报
回复
select id,mian=(case when isnull(Table_1.mian,'')='' then  Table_2.mian else Table_1.mian end)
from Table_1 left join Table_2 on Table_1.id=Table_2.id
jiemo587 2011-05-26
  • 打赏
  • 举报
回复
create table #t1 ( [id] INT, [mian] VARCHAR(30) )
INSERT INTO #t1
SELECT
1, '但是复苏的' UNION ALL SELECT
2, '' UNION ALL SELECT
3, 'Delphi' UNION ALL SELECT
4, ''

create table #t2 ( [id] INT, [mian] VARCHAR(30) )
INSERT INTO #t2
SELECT
1, 'dsf' UNION ALL SELECT
2, 'adfv' UNION ALL SELECT
3, 'ouio' UNION ALL SELECT
4, 'vbnm'


select isnull(t1.id,t2.id),isnull((case t1.mian when '' then null else t1.mian end),t2.mian)
from #t1 t1
full join #t2 t2
on t1.id = t2.id
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dearbinge 的回复:]
不用,你把CASE WHEN 条件分细点就可以了
7楼的就可以
[/Quote]
还有就是在case when 里面条件怎么样划分能区别?
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dearbinge 的回复:]
不用,你把CASE WHEN 条件分细点就可以了
7楼的就可以
[/Quote]
嗯 7楼的是可以但是如果用子查询的话数据多就会有影响,不是嘛?
dearbinge 2011-05-26
  • 打赏
  • 举报
回复
不用,你把CASE WHEN 条件分细点就可以了
7楼的就可以
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dearbinge 的回复:]
说明你的不是为NULL 而是空字符串

SQL code

select t1.id,case t1.mian when '' then t1.mian else t2.mian end)
from Table_1 t1
inner join Table_2 t2
on t1.id = t2.id
[/Quote]
意思是说还的看数据库里面的字段类型?
dearbinge 2011-05-26
  • 打赏
  • 举报
回复
说明你的不是为NULL 而是空字符串

select t1.id,case t1.mian when '' then t1.mian else t2.mian end)
from Table_1 t1
inner join Table_2 t2
on t1.id = t2.id
ForFumm 2011-05-26
  • 打赏
  • 举报
回复
SET NOCOUNT ON
DECLARE @t1 TABLE ( [id] INT, [mian] VARCHAR(30) )
INSERT INTO @t1
SELECT
1, '但是复苏的' UNION ALL SELECT
2, '' UNION ALL SELECT
3, 'Delphi' UNION ALL SELECT
4, ''

DECLARE @t2 TABLE ( [id] INT, [mian] VARCHAR(30) )
INSERT INTO @t2
SELECT
1, 'dsf' UNION ALL SELECT
2, 'adfv' UNION ALL SELECT
3, 'ouio' UNION ALL SELECT
4, 'vbnm'

SET NOCOUNT OFF

SELECT A.[id],
CASE WHEN A.[mian] IS NULL OR A.[mian]='' THEN (SELECT TOP 1 [mian] FROM @t2 WHERE [id]=A.[id]) ELSE A.[mian] END 'mian' FROM @t1 A

/*id mian
----------- ------------------------------
1 但是复苏的
2 adfv
3 Delphi
4 vbnm

(所影响的行数为 4 行)
*/
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 duoxu1983 的回复:]
建议full join 可能id并不完全相同 inner join会少记录
[/Quote]
忘记说了一点就是 他们之间的关联是ID=ID
zhangzhen_927116 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dearbinge 的回复:]
SQL code

select id,isnull(t1.mian,t2.mian)
from Table_1 t1
inner join Table_2 t2
on t1.id = t2.id
[/Quote]
不行
说ID不明确,但是给了它t1还是不行
select t1.id,isnull(t1.mian,t2.mian) 
from Table_1 t1
inner join Table_2 t2
on t1.id = t2.id

1 但是复苏的
2
3 Delphi
4

duoxu1983 2011-05-26
  • 打赏
  • 举报
回复
建议full join 可能id并不完全相同 inner join会少记录
am 2011-05-26
  • 打赏
  • 举报
回复
楼上方法可行
am 2011-05-26
  • 打赏
  • 举报
回复
使用 case when
加载更多回复(1)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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