【发布时间】:2010-09-20 12:17:11
【问题描述】:
有人可以帮忙选择脚本吗?
想要的结果
TABLENAME, ATTRIBUTE, NULLABLE, DATATYPE, LENGTH, DESC, HELP_TEXT having count(datadic.ATTRIBUTE)>1 (because these can only be unique)
并且对于具有相同值的任何其他属性(不包括 DDKEY 和 SerNo)不是唯一的。
即
TABLE2 ADDR4 NULL VARCHAR2 15 Unit Address Line 4 Unit address line 4
TABLE1 ADDR4 NULL VARCHAR2 30 Unit Address Line 4 Unit address line 4
我正在努力解决嵌套查询
现实生活中我想看看我的数据库在不同的表中是否有任何具有不同值的属性,这是一种管家练习。
我有 154 个表 700 个属性
到目前为止
select attribute,count(DATADIC.ATTRIBUTE) as "ATTRIBUTE"
from "DATADIC" "DATADIC"
group by DATADIC.ATTRIBUTE
having count(datadic.ATTRIBUTE)>1)
order by count(DATADIC.ATTRIBUTE)
然后
select TABLENAME,ATTRIBUTE,NULLABLE, DATATYPE, LENGTH, DESC, HELP_TEXT
from datadic
where
attribute in
(select attribute,count(DATADIC.ATTRIBUTE) as "ATTRIBUTE"
from "DATADIC" "DATADIC"
group by DATADIC.ATTRIBUTE
having count(datadic.ATTRIBUTE)>1)
order by count(DATADIC.ATTRIBUTE)
值太多
desc
DATADIC.
DDKEY Number
SER Number
TABLENAME Varchar2 15
ATTRIBUTE Varchar2 25
NULLABLE Varchar2 10
DATATYPE Varchar2 15
LENGTH number(7,3)
DESCRIPTION Varchar2 30
HELP_TEXT Varchar2 1000
样本数据
556 5 TABLE2 ADDR1 NULL VARCHAR2 30 Unit Address Line 1 Unit address line 1
545 5 TABLE1 ADDR1 NULL VARCHAR2 30 Unit Address Line 1 Unit address line 1
546 6 TABLE1 ADDR2 NULL VARCHAR2 30 Unit Address Line 2 Unit address line 2
557 6 TABLE2 ADDR2 NULL VARCHAR2 30 Unit Address Line 2 Unit address line 2
547 7 TABLE1 ADDR3 NULL VARCHAR2 30 Unit Address Line 3 Unit address line 3
558 7 TABLE2 ADDR3 NULL VARCHAR2 30 Unit Address Line 3 Unit address line 3
559 8 TABLE2 ADDR4 NULL VARCHAR2 15 Unit Address Line 4 Unit address line 4
548 8 TABLE1 ADDR4 NULL VARCHAR2 30 Unit Address Line 4 Unit address line 4
有用的脚本
CREATE TABLE "DATADIC"
( "DDKEY" NUMBER,
"SER" NUMBER,
"TABLENAME" VARCHAR2(15),
"ATTRIBUTE" VARCHAR2(25),
"NULLABLE" VARCHAR2(10),
"DATATYPE" VARCHAR2(15),
"LENGTH" NUMBER(7,3),
"DESCRIPTION" VARCHAR2(30),
"HELP_TEXT" VARCHAR2(1000),
CONSTRAINT "DATADIC_PK" PRIMARY KEY ("DDKEY") ENABLE
)
/
CREATE OR REPLACE TRIGGER "bi_DATADIC"
before insert on "DATADIC"
for each row
begin
for c1 in (
select "DATADIC_SEQ".nextval next_val
from dual
) loop
:new."DDKEY" := c1.next_val;
end loop;
end;
/
ALTER TRIGGER "bi_DATADIC" ENABLE
/
数据 csv
556,5,TABLE2,ADDR1,NULL,VARCHAR2,30,Unit Address Line 1,Unit address line 1
557,6,TABLE2,ADDR2,NULL,VARCHAR2,30,Unit Address Line 2,Unit address line 2
558,7,TABLE2,ADDR3,NULL,VARCHAR2,30,Unit Address Line 3,Unit address line 3
559,8,TABLE2,ADDR4,NULL,VARCHAR2,15,Unit Address Line 4,Unit address line 4
545,5,TABLE1,ADDR1,NULL,VARCHAR2,30,Unit Address Line 1,Unit address line 1
546,6,TABLE1,ADDR2,NULL,VARCHAR2,30,Unit Address Line 2,Unit address line 2
547,7,TABLE1,ADDR3,NULL,VARCHAR2,30,Unit Address Line 3,Unit address line 3
548,8,TABLE1,ADDR4,NULL,VARCHAR2,30,Unit Address Line 4,Unit address line 4
更新的数据现在正在使用此查询,但我不需要使不唯一
select * from (
select TABLENAME,
ATTRIBUTE,
NULLABLE,
DATATYPE,
LENGTH,
DESCRIPTION,
HELP_TEXT,
count(*) over (partition by attribute) attr_count
from datadic
) where attr_count > 1
TABLENAME ATTRIBUTE NULLABLE DATATYPE LENGTH 描述 HELP_TEXT ATTR_COUNT TABLE2 ADDR1 NULL VARCHAR2 30 单元地址行 1 单元地址行 1 2 TABLE1 ADDR1 NULL VARCHAR2 30 单元地址行 1 单元地址行 1 2 TABLE1 ADDR2 NULL VARCHAR2 30 单元地址行 2 单元地址行 2 2 TABLE2 ADDR2 NULL VARCHAR2 30 单元地址行 2 单元地址行 2 2 TABLE1 ADDR3 NULL VARCHAR2 30 单元地址行 3 单元地址行 3 2 TABLE2 ADDR3 NULL VARCHAR2 30 单元地址线 3 单元地址线 3 2 TABLE2 ADDR4 NULL VARCHAR2 30 单元地址行 4 单元地址行 4 2 TABLE1 ADDR4 NULL VARCHAR2 30 单元地址行 4 单元地址行 4 2
【问题讨论】: