我想过滤一些给定值的数据,但我没有字段名称。例如,我想要返回具有特定层的第三方供应商; tier1,tier2等等所以我需要在表级而不是字段上进行WHERE
。当我有表名时,这可能吗?是否可以在给定模式中没有表名?我尝试了WHERE
中的*,但这并不起作用。
SELECT * FROM vendor v WHERE v.* LIKE('%tier%')
感谢您的帮助!
答案 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 )