SELECT A.用户,B.权限,ISNULL)C.是否有权,'否') AS 是否有权
FROM
用户表 AS A CROSS JOIN 权限表 AS B LEFT JOIN 权限分配表 C ON
A.用户编号=C.用户编号 AND B.权限编号=C.权限编号 AND C.是否有权='是'

解决方案 »

  1.   

    试试select 权限表.权限 权限分配表.是否有权 from 权限表 权限分配表 left outer join 权限分配表 on 权限分配表.权限编号=权限表.权限编号 union 
    select 用户 from 用户表 权限分配表 where 用户表.用户编号=权限分配表.用户编号
      

  2.   

    更正:
    SELECT A.用户,B.权限,ISNULL(C.是否有权,'无') AS 是否有权
    FROM
    用户表 AS A CROSS JOIN 权限表 AS B LEFT JOIN 权限分配表 C ON
    A.用户编号=C.用户编号 AND B.权限编号=C.权限编号 AND C.是否有权='有'
      

  3.   

    测试:
    CREATE TABLE TA(ID INT,NAME NVARCHAR(10))CREATE TABLE TB(ID INT,NAME NVARCHAR(10))CREATE TABLE TC(AID INT,BID INT,QX NVARCHAR(10))INSERT TA VALUES(
    1, N'小王')

    INSERT TA VALUES(
    2, N'小张')INSERT TB VALUES(
    1, N'开机')
    INSERT TB VALUES(
    2, N'关机')
    INSERT TB VALUES(
    3, N'重启')
    INSERT TB VALUES(
    4, N'格式化')INSERT TC VALUES(
    1,  1, N'有')
    INSERT TC VALUES(
    2,  4, N'有')
    INSERT TC VALUES(
    2,  3, N'无')SELECT A.NAME,B.NAME AS NAME1,ISNULL(C.QX,N'无') AS QX
    FROM
    TA AS A CROSS JOIN TB AS B LEFT JOIN TC C ON
    A.ID=C.AID AND B.ID=C.BID AND C.QX=N'有'结果:
    小王 开机 有
    小王 关机 无
    小王 重启 无
    小王 格式化 无
    小张 开机 无
    小张 关机 无
    小张 重启 无
    小张 格式化 有
      

  4.   

    YANG_的是完美写法,也可以这样:
    SELECT A.用户,B.权限,ISNULL(C.是否有权,'无') AS 是否有权
    FROM
    用户表 AS A,权限表 AS B,权限分配表 C 
    WHERE A.用户编号*=C.用户编号 AND B.权限编号*=C.权限编号
      

  5.   

    从用户表开始左连接到权限分配表后内连接到权限表.
    加一个isnull处理权限分配表中没有的项目.
      

  6.   

    这并不难!
    Yang 已经写出来了!
      

  7.   

    我就是不知道用ISNULL。谢谢各位了。结账了。