1. 物料类别表(树状关系 起点 为 parent_id = 0 )
CREATE TABLE T_MATERIAL_TYPE (
ID NUMBER(10) PRIMARY KEY,
MT_CODE VARCHAR2(20),
MT_NAME VARCHAR2(20),
PARENT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_TYPE VALUES(1,'A','产成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(2,'B','半成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(3,'C','原材料',0);
INSERT INTO T_MATERIAL_TYPE VALUES(4,'A','灯盘类',1);
2.物料表
CREATE TABLE T_MATERIAL_DETAIL(
ID NUMBER(10) PRIMARY KEY,
MD_CODE VARCHAR2(20),
MD_NAME VARCHAR2(20),
MT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_DETAIL
VALUES(1,'AA000001','1#灯盘',4);
3. 用户可操作物料类别 表
CREATE TABLE T_SYS_OPER_MATERIAL_TYPE
( ID NUMBER(10) PRIMARY KEY,
O_ID NUMBER(10) , --------用户id
MT_ID NUMBER(10) -- 物料类别id
)
用户表就不理它了.
加一条记录进去
INSERT INTO T_SYS_OPER_MATERIAL_TYPE
VALUES(1,1,4);
现在用户 要过滤物料, 这个语句就不是很好写.
我的写法是 先 查找 物料是否存在, 然后 ,判断 存在的物料的类别是否在用户的可操作物料类别中.
SELECT ID, G_CODE ACODE, G_NAME ANAME
FROM T_MATERIAL_DETAIL A
WHERE (A.G_CODE LIKE '%条件%' OR A.G_NAME LIKE '%条件%')
AND EXISTS (SELECT 1
FROM (
SELECT ID FROM T_MATERIAL_CODING_METHOD MC
CONNECT BY PRIOR ID = PARENT_ID
START WITH EXISTS
(SELECT 1
FROM T_SYS_OPERATOR_MATERIAL OM
WHERE OM.O_ID = 1
AND MC.ID = OM.M_ID)) T1
WHERE T1.ID = A.CM_ID)
好像走的都是全表扫描 . 不知道 大家怎么处理 这种情况.
CREATE TABLE T_MATERIAL_TYPE (
ID NUMBER(10) PRIMARY KEY,
MT_CODE VARCHAR2(20),
MT_NAME VARCHAR2(20),
PARENT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_TYPE VALUES(1,'A','产成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(2,'B','半成品',0);
INSERT INTO T_MATERIAL_TYPE VALUES(3,'C','原材料',0);
INSERT INTO T_MATERIAL_TYPE VALUES(4,'A','灯盘类',1);
2.物料表
CREATE TABLE T_MATERIAL_DETAIL(
ID NUMBER(10) PRIMARY KEY,
MD_CODE VARCHAR2(20),
MD_NAME VARCHAR2(20),
MT_ID NUMBER(10)
)
INSERT INTO T_MATERIAL_DETAIL
VALUES(1,'AA000001','1#灯盘',4);
3. 用户可操作物料类别 表
CREATE TABLE T_SYS_OPER_MATERIAL_TYPE
( ID NUMBER(10) PRIMARY KEY,
O_ID NUMBER(10) , --------用户id
MT_ID NUMBER(10) -- 物料类别id
)
用户表就不理它了.
加一条记录进去
INSERT INTO T_SYS_OPER_MATERIAL_TYPE
VALUES(1,1,4);
现在用户 要过滤物料, 这个语句就不是很好写.
我的写法是 先 查找 物料是否存在, 然后 ,判断 存在的物料的类别是否在用户的可操作物料类别中.
SELECT ID, G_CODE ACODE, G_NAME ANAME
FROM T_MATERIAL_DETAIL A
WHERE (A.G_CODE LIKE '%条件%' OR A.G_NAME LIKE '%条件%')
AND EXISTS (SELECT 1
FROM (
SELECT ID FROM T_MATERIAL_CODING_METHOD MC
CONNECT BY PRIOR ID = PARENT_ID
START WITH EXISTS
(SELECT 1
FROM T_SYS_OPERATOR_MATERIAL OM
WHERE OM.O_ID = 1
AND MC.ID = OM.M_ID)) T1
WHERE T1.ID = A.CM_ID)
好像走的都是全表扫描 . 不知道 大家怎么处理 这种情况.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-531759/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/554557/viewspace-531759/