+-
在 sql 查询中添加过滤器(ORACLE 数据库)。

我需要列出表,colomns和他们的数据类型,我用这个。

select TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns order by TABLE_NAME;

问题是数据库太大,我只需要2000个特定的表columndatatype。

例如:(我有2000行这样的表名是非常随机的,并且在commun中没有任何东西,所以列名也是如此)

TABLE            Column           SCHEMA
DMT_AAAAAAA        C1111          ANT_A1
DMT_AAAAAAA        C1111          ANT_A2
BBBBBBBB           A4444          ANT_A3
JHD6365            H5525          ZUGRU
WRK679             C3020          MUSTSU
TDG5378            C66739         SHGUY

我试着用这个查询来过滤模式。

select TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns where OWNER in ('ANT_A1','ANT_A2','ANT_A1','ZUGRU','MUSTSU','SHGUY') order by TABLE_NAME;

现在的问题是,它列出了所有的列,甚至是我不需要的列。

有办法只过滤掉需要的行吗? 预期的输出。

|table name   |   column    |  data type|
DMT_AAAAAAA        C1111          NUMBER
DMT_AAAAAAA        C1111          VARCHAR
BBBBBBBB           A4444          NUMBER
JHD6365            H5525          VARCHAR
WRK679             C3020          VARCHAR
TDG5378            C66739         VARCHAR

谢谢你。

2
投票

如果你想在不同的模式和表中显示某些列的信息,请在一个 IN 子句使用元组。

select owner, table_name, column_name, data_type
from dba_tab_columns 
where (owner, table_name, column_name) in 
(
  ('DMT_AAAAAAA', 'C1111', 'ANT_A1'),
  ('DMT_AAAAAAA', 'C1111', 'ANT_A2'),
  ('BBBBBBBB', 'A4444', 'ANT_A3'),
  ('JHD6365', 'H5525', 'ZUGRU'),
  ('WRK679', 'C3020', 'MUSTSU'),
  ('TDG5378', 'C66739', 'SHGUY')
)
order by owner, table_name, column_name;
1
投票

检查以下内容是否足够。(我只考虑你的输出)

select Distinct TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns

如果你不想要这些表格,'BBBBBBB'和'WRK679'。

把这些内容放到一个表中(比如说tblExclude),然后你可以使用下面的方法

select Distinct TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns a
Left Join tblExclude b on a.TABLE_NAME = b.TABLE_NAME
Where b.TABLE_NAME is null