如何写一条排除某一字段的sql语句!!!!!!!!!!!!!!!!!!!!!!!

时间:2022-01-26 14:04:55
有多张表中都有id字段,在查询时如何在查这些表的时候不显示id字段。

例如:
表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

#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

#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;
/


#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;
/


#26


select * from col where tname=upper('abc');


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

#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

#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;
/


#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;
/


#26


select * from col where tname=upper('abc');


distinct一下不就是了,
你看这个启发行不行

#27


bisliu(努力学习oracle!) 
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。

或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。

#28


谢谢大家,如果谁还有其他方法不妨也贴出来。