做期初库存,现在有仓库:编号,名称。
商品:编号,名称。
库存表:仓库编号,商品编号,库存数量,库存上限,库存下限。我想做成这种样子的,左边要列出所有商品,不管它当前在库存表中有没有记录。仓库名称:北京库(选择)------------------------------------
商品编号   商品名称   库存数量    库存上限    库存下限
001        信封       [input]     [input]     [input]
002        信纸       [input]     2700          20
003        墨         12          [input]     [input]
004        本子       [input]     2300        [input]
005        铅笔       [input]     [input]     26
006        毛笔       [input]     [input]     [input]
..........................-------------------------------------有数字的就表示已经输入了,没数字的就显示空白等待输入,界面我已经做好了。SQL1:
select 商品.编号,商品.名称,商品.单位,库存上限,库存下限 from 库存表 
full join 商品 on 商品.编号=库存表.商品编号 
full join 仓库 on 1=1
where 仓库.名称='北京库'这样却会把其他仓库中的也带进来。商品有重复SQL2:select 商品.编号,商品.名称,商品.单位,库存上限,库存下限 from 库存表 
full join 商品 on 商品.编号=库存表.商品编号 
full join 仓库 on 仓库.编号=库存表.仓库编号
where 仓库.名称='北京库'这样商品却显示不全了。
怎么办?
这样的SQL语句应该怎么写呢?
就是说左边要列出所有商品,不管它当前在库存表中有没有记录。

解决方案 »

  1.   


    --try:
    select 商品.编号,商品.名称,商品.单位,库存上限,库存下限 from 商品
    left join 库存表 on 商品.编号=库存表.商品编号
    left join 仓库 on 仓库.编号=库存表.仓库编号
    where 仓库.名称='北京库' 
      

  2.   

    select  编号,名称 from 商品
    001 CPU
    0021 光驱
    003 内存
    004 显卡
    005 VISUAL STUDIO
    006 主板
    007 Windows XP
    0076 Office 2007
    008 Linux
    009 硬盘
    010 机箱
    01048 鼠标
    0115 键盘
    select 编号,名称 from 仓库
    001 北京库
    002 上海库
    003 无锡库select 商品编号,仓库编号,库存数量,库存上限,库存下限  from 库存表
    003 001 4274 342 3
    004 001 707 0 0
    005 001 64 0 0
    006 001 177 4343 0
    001 001 1375 0 0
    008 001 121 76786 0
    007 001 32 545 0
    0076 001 476 6565 0
    009 001 503 8776 0
    010 001 34531 6565 0
    001 002 3222 NULL NULL
    004 002 3232153 NULL NULL
    0021 001 NULL 32 12
    01048 001 NULL 6565 0
    0115 001 NULL 6565 0
      

  3.   

    pt1314917select 商品.编号,商品.名称,商品.单位,库存上限,库存下限 from 商品
    left join 库存表 on 商品.编号=库存表.商品编号
    left join 仓库 on 仓库.编号=库存表.仓库编号
    where 仓库.名称='上海库' 这样显示出来,只是两行001 CPU 个 NULL NULL
    004 显卡 个 NULL NULL
      

  4.   


    --try:
    select 商品.编号,商品.名称,--商品.单位,
    库存上限,库存下限 from 商品
    left join 库存表 on 商品.编号=库存表.商品编号
    left join 仓库 on 仓库.编号=库存表.仓库编号
    and 仓库.名称='上海库' 
      

  5.   

    如果没有库存也要显示出来,建议做个存储过程,建立中间表,然后update
    这样比较清晰一点。1、建立temptable
    仓库编号 仓库名称  商品编号 商品名称 库存量  上限 下限2、insert into temptable
    (仓库编号,仓库名称,商品编号,商品名称)3、update 库存量、上限、下限等其他各列4、按照条件查询temptable order by 商品编号
      

  6.   


    谢谢pt1314917,可是这样又有重复了:
    select 商品.编号,商品.名称,--商品.单位,
    库存上限,库存下限 from 商品
    left join 库存表 on 商品.编号=库存表.商品编号
    left join 仓库 on 仓库.编号=库存表.仓库编号
    and 仓库.名称='上海库' 001 CPU 0 0
    001 CPU NULL NULL
    0021 光驱 32 12
    003 内存 342 3
    004 显卡 0 0
    004 显卡 NULL NULL
    005 VISUAL STUDIO 0 0
    006 主板 4343 0
    007 Windows XP 545 0
    0076 Office 2007 6565 0
    008 Linux 76786 0
    009 硬盘 8776 0
    010 机箱 6565 0
    01048 鼠标 6565 0
    0115 键盘 6565 0
      

  7.   


    select a.编号,a.名称,商品.单位,
    库存上限,库存下限 from 商品 a
    left join 
    (select 商品编号,库存上限,库存下限 from 库存表,仓库 where 仓库.编号=库存表.仓库编号
    and 仓库.名称='上海库')b
    on a.编号=b.商品编号