|
数据库结构
1、TA
CREATE TABLE TA
(
N_ID NUMBER(10) NOT NULL,
C_NAME VARCHAR2(50 BYTE),
N_SUP_ID NUMBER(10),
C_COLOR VARCHAR2(10 BYTE)
)
/
ALTER TABLE TA ADD (
PRIMARY KEY
(N_ID))
/
2、TCODE
CREATE TABLE TCODE
(
C_DM VARCHAR2(10),
C_MC VARCHAR2(50)
)
/
ALTER TABLE TCODE ADD (
PRIMARY KEY
(C_DM))
/
3、TACODE
create view TACODE as
SELECT
N_ID, C_NAME, N_SUP_ID, C_COLOR, nvl(C_MC,C_COLOR) C_COLOR_NAME,
prior C_NAME C_SUP_NAME
FROM TA, TCODE
where TA.C_COLOR = TCODE.C_DM(+)
start with N_SUP_ID is null
connect by prior N_ID = N_SUP_ID
/
测试数据:
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
1, 'a', NULL, 'A');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
2, 'b', NULL, 'B');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
3, 'c', NULL, 'C');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
4, 'ab', 1, 'D');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
5, 'ca', 3, 'D');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
6, 'abc', 4, 'A');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
7, 'abd', 4, 'A');
INSERT INTO TA ( N_ID, C_NAME, N_SUP_ID, C_COLOR ) VALUES (
8, 'ac', 1, 'C');
COMMIT;
INSERT INTO TCODE ( C_DM, C_MC) VALUES (
'A', '黑色');
INSERT INTO TCODE ( C_DM, C_MC) VALUES (
'B', '红色');
INSERT INTO TCODE ( C_DM, C_MC) VALUES (
'C', '蓝色');
INSERT INTO TCODE ( C_DM, C_MC) VALUES (
'E', '灰色');
COMMIT;
看看视图中的数据:
select * from tacode;
1 a A 黑色
8 ac 1 C 蓝色 a
4 ab 1 D D a
7 abd 4 A 黑色 ab
6 abc 4 A 黑色 ab
2 b B 红色
3 c C 蓝色
5 ca 3 D D c
当我以C_COLOR为条件做查询时:
select * from tacode
where c_color='C';
8 ac 1 C 蓝色 a
8 ac 1 C 蓝色 a
8 ac 1 C 蓝色 a
8 ac 1 C 蓝色 a
3 c C 蓝色
可我想要的结果是这样才对
3 c C 蓝色
8 ac 1 C 蓝色 a
请问这个查询语句应该怎么写?(只能通过TACODE去查)
以C_NAME、N_ID作为条件,都不会出现这种情况。 |
|