当我没有字段名称时返回结果

时间:2014-07-21 21:29:04

标签: sql oracle

我想过滤一些给定值的数据,但我没有字段名称。例如,我想要返回具有特定层的第三方供应商; tier1,tier2等等所以我需要在表级而不是字段上进行WHERE。当我有表名时,这可能吗?是否可以在给定模式中没有表名?我尝试了WHERE中的*,但这并不起作用。

 SELECT * FROM vendor v WHERE v.* LIKE('%tier%') 

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在Oracle SQLPlus和许多Oracle查询工具中,DESCRIBE命令提供表结构的描述,以及它们的字段名称,以便您可以编写查询。

DESC是命令的缩写。

SQL> desc vendors
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 ID                                        NOT NULL NUMBER(38)
 SLA                                                VARCHAR2(10)
 DESCRIPTION                                        VARCHAR2(100)

即使没有DESCRIBE,您也可以从任何SQL工具执行以下操作,以生成包含列标题的单行:

select * from vendors where rownum = 1;

如果这不够好,并且说你有大量的列,你可以从数据字典中生成一堆关于这个表的SQL语句。

set head off
select 'select * from '||table_name||' where '||column_name||' like ''%tier%'';'
 from user_tab_cols where table_name = 'VENDORS' and data_type like 'VARCHAR%';

-- Results
select * from VENDORS where DESCRIPTION like '%tier%';
select * from VENDORS where SLA like '%tier%';

然后复制粘贴并逐个运行它们。

答案 1 :(得分:0)

WHERE子句检查是否有一个或多个列,如tier

SELECT * FROM vendor 
WHERE
    (( SELECT COUNT(*)
      FROM user_tab_cols
      WHERE table_name = 'vendor' AND column_name LIKE '%tier%') >0 )