礼物表:
id name
1 黄瓜
2 西红柿
3 西瓜
持有表:
id 用户名 礼物id 数量
1 张三 1 3
想根据所有礼物查询某人持有数量
where name='张三'
用户名 礼物名 数量
张三 黄瓜 3
张三 西红柿 0
张三 西瓜 0
where name='李四'
用户名 礼物名 数量
李四 黄瓜 0
李四 西红柿 0
李四 西瓜 0
SQL 查询 疑难
------解决方案--------------------
select b.用户名,a.礼物名,b.数量
from
礼物表 a,持有表 b
------解决方案--------------------
这个通过一条语句是不可能的
对于name = '张三'的情况,可以做到
对于name = '李四'的情况,因为数据表中不存在李四,所以不可能通过一条语句来实现将李四作为结果集中的一列出现。
楼主需要存储过程吗?
------解决方案--------------------
DECLARE @name SYSNAME
SET @name = '张三'
;WITH tb1(id,NAME)
AS
(
SELECT 1,'黄瓜'
UNION ALL
SELECT 2,'西红柿'
UNION ALL
SELECT 3,'西瓜'
),
tb2(id,用户名,礼物id,数量)
AS
(
SELECT 1,'张三',1,3
)
SELECT 用户名 = isnull(tb2.用户名,@name),礼物名 = tb1.name,数量 = isnull(tb2.数量,0) FROM tb1 LEFT JOIN tb2 on tb1.id = tb2.礼物id
AND tb2.用户名= @name
结果如下:
用户名 礼物名 数量
张三 黄瓜 3
张三 西红柿 0
张三 西瓜 0
DECLARE @name SYSNAME
SET @name = '李四'
;WITH tb1(id,NAME)
AS