 悬赏园豆:5
                [已解决问题] 
            
                    解决于 2012-07-03 09:04
                悬赏园豆: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语句?
好难!
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

这个是执行结果
@笨笨蜗牛: 非常感谢。cross join听还没听说过呢。是得好好加加油了。。
@猪头猪脑:
当两个表之间没有join条件(做全正交的时候),也可以不写cross join,直接两个表然后逗号间隔就可以。
@笨笨蜗牛: 嗯。好。我会试下的。谢谢您
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))
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
楼上速度好快
@Shannon:
你的比我的简洁,少用了一个select。
非常感谢