首页 新闻 会员 周边

求助sql语句相关问题?

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-03 09:04

有三张表

会员注册信息表

会员注册信息表 Users

字段

类型

为空

备注

UserId

String

会员id

Passoword

String

密码

……

 

 

 

 

 

 

 

数据

UserId

Passoword

Zhangsan

123456

Lisi

123456

Wangwu

123456

……

 

 

 

 

业务信息表

业务信息表 BusienssInfo

字段

类型

为空

备注

ID

Int

业务id

BusinessName

String

业务名称

……

 

 

 

 

 

 

 

数据

ID

BusinessName

1

支付宝支付

2

财富通支付

3

中国银行支付

……

 

会员开通业务信息关系表

会员开通业务信息关系表 BusinessRelation

字段

类型

为空

备注

ID

Int

编号

UserId

String

会员id

BusinessId

Int

业务id

……

 

 

 

 

 

 

 

数据

ID

UserId

BusinessId

1

Zhangsan

1

2

Zhangsan

2

3

Zhangsan

3

4

Lisi

1

5

Lisi

2

6

Wangwu

1

……

 

 

 

 

 

 

我现在想实现的功能是

例:

businessId为3的

zhangsan  已开通

Lisi         未开通

Wangwu  未开通

 

根据业务id查询已开通和未开通的会员,进行全部显示(备注:如果BusinessRelation表里有相关会员userid就代表已经开通),该怎么写sql语句?

猪头猪脑的主页 猪头猪脑 | 初学一级 | 园豆:6
提问于:2012-07-02 16:46
< >
分享
最佳答案
0

好难!

SELECT B.bussinessName, b.UserId, CASE isnull(a.bussinessName, '') WHEN '' THEN '未开通' ELSE '已开通' END AS status
FROM  (
        SELECT BusienssInfo.id, Users.UserId, BusienssInfo.bussinessName
            FROM  BusienssInfo CROSS JOIN Users
      ) b 
      left OUTER JOIN
      (
        SELECT BusinessRelation.BusinessId as id, BusinessRelation.UserId, BusienssInfo.bussinessName
            FROM BusienssInfo inner JOIN BusinessRelation on BusienssInfo.ID = BusinessRelation.BusinessId
       ) a
       on a.ID = b.ID and a.UserId = b.UserId
where b.ID=2
收获园豆:3
无之无 | 大侠五级 |园豆:5095 | 2012-07-02 17:34

这个是执行结果

无之无 | 园豆:5095 (大侠五级) | 2012-07-02 17:35

@笨笨蜗牛: 非常感谢。cross join听还没听说过呢。是得好好加加油了。。

猪头猪脑 | 园豆:6 (初学一级) | 2012-07-02 17:52

@猪头猪脑: 

当两个表之间没有join条件(做全正交的时候),也可以不写cross join,直接两个表然后逗号间隔就可以。

无之无 | 园豆:5095 (大侠五级) | 2012-07-02 17:55

@笨笨蜗牛:  嗯。好。我会试下的。谢谢您

猪头猪脑 | 园豆:6 (初学一级) | 2012-07-02 17:57
其他回答(2)
0

select Users.* from Users where Users.UserId in(select BusinessRelation.UserId from BusinessRelation where  BusinessRelation.BusinessId in(select BusienssInfo.ID from BusienssInfo where BusienssInfo.ID=1))

悟行 | 园豆:12559 (专家六级) | 2012-07-02 17:31
0

SELECT C.ID,C.BusinessName,C.UserID,[开通/未开通]=Case When Isnull(D.UserID,'')='' Then N'未开通' Else N'开通' End
FROM (
SELECT A.ID,A.BusinessName,B.UserID
From dbo.BusienssInfo a
Cross Join dbo.Users b
) C
LEFT JOIN dbo.BusinessRelation D ON C.UserID =D.UserID AND C.ID =D.BusinessId

收获园豆:2
Shannon | 园豆:611 (小虾三级) | 2012-07-02 17:42

楼上速度好快  

支持(1) 反对(0) Shannon | 园豆:611 (小虾三级) | 2012-07-02 17:43

@Shannon: 

你的比我的简洁,少用了一个select。

支持(1) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-07-02 17:45

非常感谢

支持(0) 反对(0) 猪头猪脑 | 园豆:6 (初学一级) | 2012-07-02 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册