两张表。显示没有的内容
如:
a表
id name 发放日期 发放数量
1 鞋 2003-10-1 1b表
id name 发放数量
1 鞋 1
2 裤子 2想要的效果是鞋 2003-10-1 1
裤子 2008-10-1 2
b表中的那个鞋子不显示,只显示a表中的内容和a表中没有但b表中有的内容。
鞋子在a表中有.就可以不显示!
如:
a表
id name 发放日期 发放数量
1 鞋 2003-10-1 1b表
id name 发放数量
1 鞋 1
2 裤子 2想要的效果是鞋 2003-10-1 1
裤子 2008-10-1 2
b表中的那个鞋子不显示,只显示a表中的内容和a表中没有但b表中有的内容。
鞋子在a表中有.就可以不显示!
解决方案 »
- pl\sql 行列转换问题
- 【100分在线】如何克隆oracle的所有东东?
- 一个SQL多表查询的错误
- 请教一个sql的写法
- oracle 10g 中oem只能用sys登陆吗
- 请问下面2个查询语句有什么区别,为什么获取到的记录集不一样?
- 在oracle中如何加密自己写的存储过程?
- oracle 9i 怎么安装?我的系统是windows 2000 专业版的,我为什么安装不上那?
- oracle中进行行索的方法
- 下列语句在Oracle 9i中出错,错误信息如下(我用具有的dba权限的账号登陆,但不是是sys和system账号)
- [求助]为什么不执行"新建数据库里的存储过程"?
- 两表联合查询,其中一个列是字符串构成,什么语句实现
union
select id,name,num from b
create table a(id number,name varchar2(100),cdate date,num number);
create table b(id number,name varchar2(100),num number);insert into a select 1,'鞋子',sysdate,1 from dual;
insert into b select 1,'鞋子',1 from dual union all select 2,'裤子',2 from dual;
--执行查询
select id,name,num from a
union
select id,name,num from b
--查询结果
1 鞋子 1
2 裤子 2
SELECT * FORM a,b
WHERE a.name =b.name(+) 在Oracle PL-SQL中,左连接和右连接以如下方式来实现 查看如下语句:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid(+) = Department.deptid此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。反之:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示
SQL> select distinct
2 tt.name,
3 tt.amount,
4 nvl(max(tt.publishdate) over(partition by tt.name,tt.amount),sysdate) as publishdate
5 from (
6 select aname as name,
7 publishdate,
8 amount
9 from a
10 union
11 select bname as name,
12 null as publishdate,
13 amount
14 from b
15 )tt;NAME AMOUNT PUBLISHDATE
---- ---------- -----------
裤子 2 1/3/2008
鞋 1 1/1/2003
union
select id,name,'' as 显示日期,num from b
上下名称一致就可以了