请教一个查询语句

Accelerator 2007-02-05 08:34:06
Access数据库
有商品表A,仓库表B,库存表,C。

商品表:
商品ID
商品名称

仓库表:
仓库ID
仓库名称

库存表:
商品ID
仓库ID
库存数量

想查询所有商品某一仓库的库存数量,如果库存表中没有某个商品的库存数量记录,就显示库存数量为零。
谢谢
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Accelerator 2007-02-05
  • 打赏
  • 举报
回复
好了,通过了,非常感谢。
CSDN的SQL版是回帖最快的板块,我结贴可不能慢了。
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
--改一下:

SELECT 1 AS 仓库ID, (select top 1 仓库名称 from 仓库表 where 仓库ID=1) AS 仓库名称, A.商品ID, A.商品名称, iif(isnull(B.库存数量),0,B.库存数量) AS 库存数量
FROM 商品表 AS A LEFT JOIN (select * from 库存表 where 仓库ID=1) AS B ON A.商品ID=B.商品ID

Accelerator 2007-02-05
  • 打赏
  • 举报
回复
非常感谢
但是查询出来没有任何记录,我现在的库存表是没有记录的。没有预期的所有商品显示为零的效果。
houyichong 2007-02-05
  • 打赏
  • 举报
回复
哦,access有个nz相当月sqlserver的isnull
学到了,楼上原来就是那个access版的老大
以前用vb+access写过一个系统,有过的你回帖的帮助呢。
在此感谢一下
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
Access中的isnull()函数与SQL Server的isnull()函数意义不同。

Access中isnull()函数如下:


IsNull 函数


返回 Boolean 值,指出表达式是否不包含任何有效数据 (Null)。

语法

IsNull(expression)

必要的 expression 参数是一个 Variant,其中包含数值表达式或字符串表达式。

说明

如果 expression 为 Null,则 IsNull 返回 True;否则 IsNull 返回 False。如果 expression 由多个变量组成,则表达式的任何作为变量组成成分的 Null 都会使整个表达式返回 True。

Null 值指出 Variant 不包含有效数据。Null 与 Empty 不同,后者指出变量尚未初始化。Null 与长度为零的字符串 (““) 也不同,长度为零的字符串指的是空串。

重要 使用 IsNull 函数是为了确定表达式是否包含 Null 值的。在某些情况下,希望表达式取值为 True,比如希望 If Var = Null 和 If Var <> Null 取值为 True,而它们总取值为 False。这是因为任何包含 Null 的表达式本身就是 Null,所以为 False。



IsNull 函数示例
本示例使用 IsNull 函数检查变量值是否为 Null。

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar) ' 返回 False。

MyVar = ""
MyCheck = IsNull(MyVar) ' 返回 False。

MyVar = Null
MyCheck = IsNull(MyVar) ' 返回 True。

OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
如果在ADO中访问MDB数据库,用iif()方式,即:

SELECT
1 AS 仓库ID,
(select top 1 仓库名称 from 仓库表 where 仓库ID=1) AS 仓库名称,
A.商品ID,
A.商品名称,
iif(isnull(B.库存数量),0,B.库存数量) as 库存数量
FROM 商品表 AS A LEFT JOIN 库存表 AS B ON A.商品ID=B.商品ID
WHERE B.仓库ID=1;
marco08 2007-02-05
  • 打赏
  • 举报
回复
--SQL 2000

select A.*, 库存数量=isnull(C.库存数量, 0) from A
left join
(
select 商品ID, 仓库ID, 库存数量=sum(库存数量)
from C
group by 商品ID, 仓库ID
)C on A.商品ID=C.商品ID
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
如果在纯Access中可以使用以下两种方式:

SELECT
1 AS 仓库ID,
(select top 1 仓库名称 from 仓库表 where 仓库ID=1) AS 仓库名称,
A.商品ID,
A.商品名称,
iif(isnull(B.库存数量),0,B.库存数量) as 库存数量
FROM 商品表 AS A LEFT JOIN 库存表 AS B ON A.商品ID=B.商品ID
WHERE B.仓库ID=1;


--或


SELECT
1 as 仓库ID,
(select top 1 仓库名称 from 仓库表 where 仓库ID=1) as 仓库名称,
A.商品ID,
A.商品名称,
nz(B.库存数量,0) as 库存数量
FROM 商品表 AS A LEFT JOIN 库存表 AS B ON A.商品ID = B.商品ID
WHERE B.仓库ID=1
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复

Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=



OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
--Access中用nz()函数。

SELECT
1 as 仓库ID,
(select top 1 仓库名称 from 仓库表 where 仓库ID=1) as 仓库名称,
A.商品ID,
A.商品名称,
nz(B.库存数量,0) as 库存数量
FROM 商品表 AS A LEFT JOIN 库存表 AS B ON A.商品ID = B.商品ID
WHERE B.仓库ID=1

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧