我有三张表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’

解决方案 »

  1.   

    create view 视图名
    as
    select *from  sys_field_depict  inner jon 其他表
    on 
      

  2.   

    三个表直接INNER JOIN 就行了吧,交给小F
      

  3.   


    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
      

  4.   

    你表1和表2的名字一样,应该是打错了吧
    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
      

  5.   

    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.id
      

  6.   

    --激动了两把了
    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
      

  7.   

    CREATE VIEW dbo.sys_field_view
    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' 与查询中所用的表名或别名不匹配。
      

  8.   

    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 AND T1.table_id=T3.table_id 
      

  9.   

    SELECT T1.field_name, T1.field_depict
    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这是照你写的!同样我执行上面的语句,也报同样的错误啊!这是为什么那!
      

  10.   

    想询问一下,三表之间关联是如何关联?是通过sys_table_depict.table_id=sys_field_depict.id和
    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,追求速度和效率,你这样再后面综合查询,在数据表优化方面会有很大的阻碍,反而损失过多的性能及效率。视图,我也喜欢用,但是,视图不是万能的,他只是一个虚拟的表结构而已。
      

  11.   

    这三个表的关系应该是
    sys_table_depict.id=sys_field_depict.table_id和 
    sys_table_depict.id=sys_user_field.table_id
      

  12.   

    不好意思, 不该吊儿郎当地答题
    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
    */
      

  13.   

    可能是我没有描述清楚这三张表的关系!
    sys_field_depict 就是存一些字段名的,它其中有一个对应的表的table_id这个字段
    sys_table_depict 就是存表名和它自身id的。
    sys_user_field 这个表是存用户所拥有的某一张表,某个字段的。
    所以又user_id,Field、 table_id这个三个字段。是想通过用户来查找某一个人拥有某一张表的哪些字段。不知道我的设计思路是否正确!请各位前辈指教!
      

  14.   

    哦,没有关系,就把我视图稍改一下,即可成立,
    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