我有三张表sys_table_depictt、sys_field_depict、sys_user_field
结构如下:
sys_field_depict 表
字段名 字段类型 字段说明
id Int(4) 编号
field_name Nvarchar(100)字段名
field_depict Nvarchar(100)字段描述
table_id int(4) 所属表ID sys_field_depict 表
字段名 字段类型 字段说明
id Int(4) 编号
Table_name Nvarchar(100) 表名 sys_user_field 表
字段名 字段类型 字段说明
id Int(4) 编号
user_id Int(4) 用户编号
field Int(4) 所拥有字段
table_id Int(4) 表编号
里面的数据如下:
sys_field_depict 表
id field_name field_depict table_id
1 id 编号 1
2 expr 折扣数 1
3 expr_name 公式名称 1
4 expr_num 自定义编号 1 sys_field_depict 表
id Table_name
1 sys_price_expr sys_user_field 表
id user_id field table_id
1 1 2 1
2 1 3 1我想做一个试图能把三张表给连起来!
我想执行以下这张的语句。
select field_name,field_depict from 视图名 where table_id=‘1’ and user_id=‘1’
结构如下:
sys_field_depict 表
字段名 字段类型 字段说明
id Int(4) 编号
field_name Nvarchar(100)字段名
field_depict Nvarchar(100)字段描述
table_id int(4) 所属表ID sys_field_depict 表
字段名 字段类型 字段说明
id Int(4) 编号
Table_name Nvarchar(100) 表名 sys_user_field 表
字段名 字段类型 字段说明
id Int(4) 编号
user_id Int(4) 用户编号
field Int(4) 所拥有字段
table_id Int(4) 表编号
里面的数据如下:
sys_field_depict 表
id field_name field_depict table_id
1 id 编号 1
2 expr 折扣数 1
3 expr_name 公式名称 1
4 expr_num 自定义编号 1 sys_field_depict 表
id Table_name
1 sys_price_expr sys_user_field 表
id user_id field table_id
1 1 2 1
2 1 3 1我想做一个试图能把三张表给连起来!
我想执行以下这张的语句。
select field_name,field_depict from 视图名 where table_id=‘1’ and user_id=‘1’
as
select *from sys_field_depict inner jon 其他表
on
select
*
from
sys_table_depictt a
join
sys_field_depict b on a.id=b.id
join
sys_user_field c on b.id=c.id
SELECT T1.字段名 ..... --第一个表
T2.字段名 .... --第二个表
T3.字段名 .... --第三个表
FROM sys_field_depict T1
INNER JOIN sys_TABLE_depict T2 ON T1.table_id=T2.ID
INNER JOIN sys_user_field T3 ON T1.ID=T3.field
*
from
sys_table_depictt a
join
sys_field_depict b on a.table_id=b.id
join
sys_user_field c on b.id=c.id
select
*
from
sys_table_depictt a
join
sys_field_depict b on a.table_id=b.id
join
sys_user_field c on b.id=c.table_id
AS
select
b.field_name, b.field_depict,c.table_id,c.user_id
from
sys_table_depictt a
join
sys_field_depict b on b.table_id=a.id
join
sys_user_field c on b.id=c.table_id
我这样写的执行的时候执行以下语句select field_name,field_depict from sys_field_view where sys_user_field.table_id='1' and sys_user_field.user_id='1'但是总提示列前缀 'sys_user_field' 与查询中所用的表名或别名不匹配。
T2.字段名 .... --第二个表
T3.字段名 .... --第三个表
FROM sys_field_depict T1
INNER JOIN sys_TABLE_depict T2 ON T1.table_id=T2.ID
INNER JOIN sys_user_field T3 ON T1.ID=T3.field AND T1.table_id=T3.table_id
FROM dbo.sys_field_depict T1 INNER JOIN
dbo.sys_table_depictt T2 ON T1.table_id = T2.ID INNER JOIN
dbo.sys_user_field T3 ON T1.id = T3.field这是照你写的!同样我执行上面的语句,也报同样的错误啊!这是为什么那!
sys_field_depict.id=sys_user_field.table_id相关联的吗,如果是的话,可以这么写,INNER JOIN 是标准SQL92语法,但我的写法,也是可以过的, CREATE VIEW SYS_VIEW
AS
SELECT
t1.id as table_depict_id,
t1.field_name,
t1.field_depict,
t2.id as field_depict_id,
t2.Table_name,
t3.id as user_field_id,
t3.user_id,
t3.field
FROM
sys_table_depict as t1,
sys_field_depict as t2,
sys_user_field as t3
WHERE
t1.table_id=t2.id
AND
t3.table_id=t2.id只是,这样子处理,略显表太碎了,细表一般是用于OLDP,追求速度和效率,你这样再后面综合查询,在数据表优化方面会有很大的阻碍,反而损失过多的性能及效率。视图,我也喜欢用,但是,视图不是万能的,他只是一个虚拟的表结构而已。
sys_table_depict.id=sys_field_depict.table_id和
sys_table_depict.id=sys_user_field.table_id
IF OBJECT_ID('sys_field_depict') IS NOT NULL DROP TABLE sys_field_depict
IF OBJECT_ID('sys_table_depictt') IS NOT NULL DROP TABLE sys_table_depictt
IF OBJECT_ID('sys_user_field') IS NOT NULL DROP TABLE sys_user_field
IF OBJECT_ID('sys_field_view') IS NOT NULL DROP VIEW sys_field_view
GO
CREATE TABLE sys_field_depict(
id Int
,field_name Nvarchar(100)
,field_depict Nvarchar(100)
,table_id int
)
INSERT INTO sys_field_depict
SELECT 1 ,'id','编号', 1 UNION ALL
SELECT 2 ,'expr','折扣数', 1 UNION ALL
SELECT 3 ,'expr_name','公式名称', 1 UNION ALL
SELECT 4 ,'expr_num','自定义编号', 1
CREATE TABLE sys_table_depictt(
id Int
,Table_name Nvarchar(100)
)
INSERT INTO sys_table_depictt
SELECT 1 ,'sys_price_expr'
CREATE TABLE sys_user_field(
id Int
,[user_id] Int
,field Int
,table_id Int
)
INSERT INTO sys_user_field
SELECT 1, 1, 2, 1 UNION ALL
SELECT 2, 1, 3, 1
GO
GO
CREATE VIEW dbo.sys_field_view
ASSELECT T1.ID 'FEILDID',T1.FIELD_NAME,T1.FIELD_DEPICT,T2.ID 'TABLEID',T2.TABLE_NAME
,T3.ID 'USERID'
FROM sys_field_depict T1
INNER JOIN sys_table_depictt T2 ON T1.table_id=T2.ID
INNER JOIN sys_user_field T3 ON T1.ID=T3.field AND T1.table_id=T3.table_id
GO
SELECT * FROM sys_field_view/*
2 expr 折扣数 1 sys_price_expr 1
3 expr_name 公式名称 1 sys_price_expr 2
*/
sys_field_depict 就是存一些字段名的,它其中有一个对应的表的table_id这个字段
sys_table_depict 就是存表名和它自身id的。
sys_user_field 这个表是存用户所拥有的某一张表,某个字段的。
所以又user_id,Field、 table_id这个三个字段。是想通过用户来查找某一个人拥有某一张表的哪些字段。不知道我的设计思路是否正确!请各位前辈指教!
CREATE VIEW SYS_VIEW
AS
SELECT
t1.id as table_depict_id,
t1.field_name,
t1.field_depict,
t2.id as field_depict_id,
t2.Table_name,
t3.id as user_field_id,
t3.user_id,
t3.field
FROM
sys_table_depict as t1,
sys_field_depict as t2,
sys_user_field as t3
WHERE
t1.table_id=t2.id
AND
t3.table_id=t2.id
AND
t1.table_id=t3.table_id