首页 新闻 会员 周边

求助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
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册。