SQL求助

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
三个表
EMP : NO,AREA(AREA是个标志位,0 本国人, 1 外国人)
11,0
12,1
LOCAL : NO ,NAME

11,ZHANGSAN

12, LISI

13, WANGWU
FOREIGN : NO,NAME

11, JAKE

12, TOM

13, ROB
现在的查询是要通过NO得到名字
现在想要得到如下的结果:
11,ZHANGSAN
12, TOM
如何写一条SQL完成?不要有重复的记录和多余的记录,不要使用GROUP BY.

帮忙,多谢
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select e.no,name from emp e,local l where e.area=0 and e.no=l.no
union
select e.no,name from emp e,foreign f where e.area=1 and e.no=f.no
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
也可以使用CASE实现
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select a.no,decode(a.area,0,b.name,1,c.name) name
from foreign c,local b,emp a
where c.no(+) = a.no
and b.no(+) = a.no;
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select distinct no,name from local
where exists
(select 'x' from emp where emp.no=local.no);
我不太明白你那标志位的意思,是主键么?
还是别的什么意思?
如果是索引的话最好把我这个语句中的子查询中WHERE子句的条件换一下。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
DB2
select a.no,(case a.area when 0 then b.name when 1 then c.name else ...end)
from EMP a,local b,foreign c
when a.no=b.no

a.no=c.no
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
and 没显示出来
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
EMP : NO,AREA(AREA是个标志位,0 本国人, 1 外国人)
11, 0
12, 1
LOCAL : NO ,NAME
11, ZHANGSAN
12, LISI
13, WANGWU
FOREIGN : NO,NAME
11, JAKE
12, TOM
13, ROB
-------------------------------------------------------------------------
Select
a.No,
decode(a.area,0,b.Name,c.Name) Name
From emp a,Local b,Foreign c
Where a.No=b.No(+)
And a.No=c.No(+)
-----------------------------------------------------
Select
a.No,
decode(a.area,0,b.Name,1,c.Name) Name
From emp a,Local b,Foreign c
Where a.No=b.No(+)
And a.No=c.No(+)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
thx:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行