例如:
表table1和table2结构如下:
table1:id name
talbe2:id age memo
查询以上表时显示效果为
talbe1:name
talbe2: age memo
28 个解决方案
#1
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where .....
#2
不选不就行了么
#3
我可能没说清楚,一次只查一张表,表名是以参数的方式输入的,也就是说如果参数是table1,则sql可能是select table1.* from talbe1,如果是talbe2,则为select table2.* from talbe2,现在需要不显示所有字段,而是除id以外其他字段。
#4
谢谢:ashzs((可以包含中文字符)) 和 yxxx(小孬)的回答,请继续关注
#5
就是,你不选不就行了 select * from table1 查询表table1中所有的字段
select name from table1 查询表table1中的字段name
是这个意思吗
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where t1.id=t2.id
select name from table1 查询表table1中的字段name
是这个意思吗
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where t1.id=t2.id
#6
楼主的意思是自动判断是否存在字段名相同吧,可以通过数据字典和动态SQL实现。其实没必要偷懒,象楼上那些写法很好。
#7
hsj20041004(光芒) :不能这样,首先只查一张表,其次任何表的显示字段可能是不同的(除了都有id外)。
#8
你要一条sql还是在存储过程中写的?
#9
ORARichard(没钱的日子......) :其实我不是想偷懒,因为需查询的表是不定的,我没有办法去确定表中的字段是哪些啊。
#10
那就的知道表中的字段了
#11
ashzs((可以包含中文字符)) :最好是一条sql吧,但使用存储过程也行。
#12
你的意思就是输入table1,就查出除了id的所有字段是吧?
汗,那你给每个表建个视图好了…………
汗,那你给每个表建个视图好了…………
#13
还有严重的问题,你都不知道表是哪张,那就更无法判断该表有哪些字段了,
那你怎么写查询,尤其是查询中的条件部分(还是多表关联)
那你怎么写查询,尤其是查询中的条件部分(还是多表关联)
#14
hsj20041004(光芒):我想应该是有两种方式吧,一种是知道所有字段了,那就在写sql的时候不显示id就可以了,另一种是不知道所有字段,但确定没张表都会排除id字段,有点想talbe.* - id
#15
測試中
#16
ORARichard(没钱的日子......) :不用考虑表的关联吧,因为即使关联,查询以后的结果还是可以看作一张表的数据的。
#17
baojianjun(包子) :谢谢,我用的数据库使oracle9.2.0.1.0
#18
yxxx(小孬):建视图应该是不可能的,因为库中的表太多了,而且扩展性也很差啊
#19
直接用sql是没有这个功能的.
除非你写一个pl/sql
除非你写一个pl/sql
#20
使用系统视图,来得到你想要得出了id以外的所有的列。然后再select
#21
只有用动态SQL,
#22
liuyi8903(甜脆夹心) 、GerryYang(轻尘) ( ):能给出更具体的方案吗,pl/sql我不是很熟
#23
我决得这样太复杂了吧,在显示时编程判断一下列名,不显示ID这一列不就行了吗?
#24
CREATE OR REPLACE FUNCTION ZHOUXY.GETFIELDNAME(tablename in varchar2)
RETURN varchar is
iLoop number;
fieldname varchar2(1000);
fieldname_cur varchar2(30);
CURSOR cur_field is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
open cur_field;
iLoop := 0;
loop
fetch cur_field into fieldname_cur;
exit when cur_field%notfound;
iLoop := iLoop + 1;
if iLoop > 1 then
fieldname := fieldname || ',' || fieldname_cur;
else
fieldname := fieldname_cur;
end if;
end loop;
close cur_field;
return fieldname;
END;
/
RETURN varchar is
iLoop number;
fieldname varchar2(1000);
fieldname_cur varchar2(30);
CURSOR cur_field is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
open cur_field;
iLoop := 0;
loop
fetch cur_field into fieldname_cur;
exit when cur_field%notfound;
iLoop := iLoop + 1;
if iLoop > 1 then
fieldname := fieldname || ',' || fieldname_cur;
else
fieldname := fieldname_cur;
end if;
end loop;
close cur_field;
return fieldname;
END;
/
#25
CREATE OR REPLACE procedure ZHOUXY.GETFIELDNAME(tablename in varchar2)
RETURN varchar is
fieldname varchar2(1000);
CURSOR mycur is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
for mytemp in mycur loop
colname := colname||mytemp.column_name||',';
end loop;
colname := substr(colname,0,length(colname)-1);
--exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对?
END;
/
RETURN varchar is
fieldname varchar2(1000);
CURSOR mycur is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
for mytemp in mycur loop
colname := colname||mytemp.column_name||',';
end loop;
colname := substr(colname,0,length(colname)-1);
--exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对?
END;
/
#26
select * from col where tname=upper('abc');
distinct一下不就是了,
你看这个启发行不行
distinct一下不就是了,
你看这个启发行不行
#27
bisliu(努力学习oracle!)
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。
或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。
或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。
#28
谢谢大家,如果谁还有其他方法不妨也贴出来。
#1
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where .....
#2
不选不就行了么
#3
我可能没说清楚,一次只查一张表,表名是以参数的方式输入的,也就是说如果参数是table1,则sql可能是select table1.* from talbe1,如果是talbe2,则为select table2.* from talbe2,现在需要不显示所有字段,而是除id以外其他字段。
#4
谢谢:ashzs((可以包含中文字符)) 和 yxxx(小孬)的回答,请继续关注
#5
就是,你不选不就行了 select * from table1 查询表table1中所有的字段
select name from table1 查询表table1中的字段name
是这个意思吗
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where t1.id=t2.id
select name from table1 查询表table1中的字段name
是这个意思吗
select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where t1.id=t2.id
#6
楼主的意思是自动判断是否存在字段名相同吧,可以通过数据字典和动态SQL实现。其实没必要偷懒,象楼上那些写法很好。
#7
hsj20041004(光芒) :不能这样,首先只查一张表,其次任何表的显示字段可能是不同的(除了都有id外)。
#8
你要一条sql还是在存储过程中写的?
#9
ORARichard(没钱的日子......) :其实我不是想偷懒,因为需查询的表是不定的,我没有办法去确定表中的字段是哪些啊。
#10
那就的知道表中的字段了
#11
ashzs((可以包含中文字符)) :最好是一条sql吧,但使用存储过程也行。
#12
你的意思就是输入table1,就查出除了id的所有字段是吧?
汗,那你给每个表建个视图好了…………
汗,那你给每个表建个视图好了…………
#13
还有严重的问题,你都不知道表是哪张,那就更无法判断该表有哪些字段了,
那你怎么写查询,尤其是查询中的条件部分(还是多表关联)
那你怎么写查询,尤其是查询中的条件部分(还是多表关联)
#14
hsj20041004(光芒):我想应该是有两种方式吧,一种是知道所有字段了,那就在写sql的时候不显示id就可以了,另一种是不知道所有字段,但确定没张表都会排除id字段,有点想talbe.* - id
#15
測試中
#16
ORARichard(没钱的日子......) :不用考虑表的关联吧,因为即使关联,查询以后的结果还是可以看作一张表的数据的。
#17
baojianjun(包子) :谢谢,我用的数据库使oracle9.2.0.1.0
#18
yxxx(小孬):建视图应该是不可能的,因为库中的表太多了,而且扩展性也很差啊
#19
直接用sql是没有这个功能的.
除非你写一个pl/sql
除非你写一个pl/sql
#20
使用系统视图,来得到你想要得出了id以外的所有的列。然后再select
#21
只有用动态SQL,
#22
liuyi8903(甜脆夹心) 、GerryYang(轻尘) ( ):能给出更具体的方案吗,pl/sql我不是很熟
#23
我决得这样太复杂了吧,在显示时编程判断一下列名,不显示ID这一列不就行了吗?
#24
CREATE OR REPLACE FUNCTION ZHOUXY.GETFIELDNAME(tablename in varchar2)
RETURN varchar is
iLoop number;
fieldname varchar2(1000);
fieldname_cur varchar2(30);
CURSOR cur_field is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
open cur_field;
iLoop := 0;
loop
fetch cur_field into fieldname_cur;
exit when cur_field%notfound;
iLoop := iLoop + 1;
if iLoop > 1 then
fieldname := fieldname || ',' || fieldname_cur;
else
fieldname := fieldname_cur;
end if;
end loop;
close cur_field;
return fieldname;
END;
/
RETURN varchar is
iLoop number;
fieldname varchar2(1000);
fieldname_cur varchar2(30);
CURSOR cur_field is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
open cur_field;
iLoop := 0;
loop
fetch cur_field into fieldname_cur;
exit when cur_field%notfound;
iLoop := iLoop + 1;
if iLoop > 1 then
fieldname := fieldname || ',' || fieldname_cur;
else
fieldname := fieldname_cur;
end if;
end loop;
close cur_field;
return fieldname;
END;
/
#25
CREATE OR REPLACE procedure ZHOUXY.GETFIELDNAME(tablename in varchar2)
RETURN varchar is
fieldname varchar2(1000);
CURSOR mycur is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
for mytemp in mycur loop
colname := colname||mytemp.column_name||',';
end loop;
colname := substr(colname,0,length(colname)-1);
--exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对?
END;
/
RETURN varchar is
fieldname varchar2(1000);
CURSOR mycur is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';
BEGIN
for mytemp in mycur loop
colname := colname||mytemp.column_name||',';
end loop;
colname := substr(colname,0,length(colname)-1);
--exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对?
END;
/
#26
select * from col where tname=upper('abc');
distinct一下不就是了,
你看这个启发行不行
distinct一下不就是了,
你看这个启发行不行
#27
bisliu(努力学习oracle!)
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。
或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。
或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。
#28
谢谢大家,如果谁还有其他方法不妨也贴出来。