SQL Server数据库查询问题(100分)

  • 主题发起人 主题发起人 孤单枪手
  • 开始时间 开始时间

孤单枪手

Unregistered / Unconfirmed
GUEST, unregistred user!
一个库有三个表
商品表:商品编号、商品名称。
仓库表:仓库编号、仓库名称。
库存清单:商品编号、仓库编号、存放数量、单价、金额。
给出如下SQL语句:
1、查询只存放在一个仓库中的商品名称、仓库名称。
2、查询所有仓库都有的商品名称、仓库名称。
 
1、查询只存放在一个仓库中的商品名称、仓库名称。

select 商品名称,仓库名称
from 商品表,仓库表,库存清单
where 商品表.商品编号=库存清单.商品编号 and 仓库表.仓库编号=库存清单.仓库编号
and 仓库名称= 你需要的名称 (或者 ‘group by 仓库名称’,你描述的不清~)

2、查询所有仓库都有的商品名称、仓库名称。

select 商品名称,仓库名称
from 商品表,仓库表,库存清单
where 商品表.商品编号=库存清单.商品编号 and 仓库表.仓库编号=库存清单.仓库编号
 
1.select a.商品名称 ,b.仓库名称
from a,b,c
where a.id=c.id and b.id =c.id1
and c.名称=:名称
 
各位:对于问题一,查询时根本不知道有没有这样
的商品(只存放在一个库中,其他库没有这种商品)

对于问题二:是要找到在所有仓库中都存在的那一种或几种商品。
各位理解的太简单了吧?!
 
问题一:

select 商品名称,仓库名称 from 商品表,仓库表,库存清单
where
库存清单.商品编号=商品表.商品编号 and
库存清单.仓库编号=仓库表.仓库编号 and
(库存清单.商品编号,1) in (select 商品编号,count(*) from 库存清单 group by 商品编号 having count(*)=1)
 
问题一(如果那个in不支持(oracle是支持的)):

select 商品名称,仓库名称 from 商品表,仓库表,库存清单 kc1
where
库存清单.商品编号=商品表.商品编号 and
库存清单.仓库编号=仓库表.仓库编号 and
exists (select 商品编号,count(*) from 库存清单 kc2 where kc1.商品编号=kc2.商品编号 group by 商品编号 having count(*)=1 )

 
问题2

select 商品名称,仓库名称 from 商品表,仓库表,库存清单 kc1
where
库存清单.商品编号=商品表.商品编号 and
库存清单.仓库编号=仓库表.仓库编号 and
exists (select 商品编号,count(*) from 库存清单 kc2 where kc1.商品编号=kc2.商品编号 group by 商品编号 having count(*)=(select count(*) from 仓库表) )
 
pipi兄:你的回答很正确
但是如果库存清单表中存在商品编号和仓库编号同时有重复的
情况(当然这就假定库存清单表不太规范),怎么办?
 
商品编号 和 仓库编号 应该设置为主键,以保证数据的合法性
 
意思是主键应该设置为(商品编号 仓库编号 )两个列
 
商品表 SPTABLE
商品名称 SP_NAME
商品编号 SP_CODE

仓库表 CKTABLE
仓库名称 CK_NAME
仓库编号 CK_CODE

库存表 KCTABLE
商品编号 SP_CODE
仓库编号 CK_CODE
商品数量
商品单价
商品金额//这个字段不需要,

只存放在一个仓库中的商品名称、仓库名称,SQL语句如下:
SELECT SP.SP_NAME,CK.CK_NAME FROM SPTABLE SP,CKTABLE CK,KCTABLE KC
WHERE SP.SP_CODE=KC.SP_CODE AND CK.CK_CODE=KC.CK_CODE
AND SP.SP_NAME<>(SELECT SPTABLE.SP_NAME FROM SPTABLE,KCTABLE
WHERE SPTABLE.SP_CODE=KCTABLE.SP_CODE GROUP BY SPTABLE.SP_NAME HAVING COUNT(*)>1)
//该语句在SQL SERVER中调试通过.

 
上面我的2个sql所有在 库存清单 里面的 count(*) 改为 count(distinct 仓库编号)
应该可以解决重复的问题
 
同意pipi的distinct的说法,第二个语句用它就不会重复了。
 
谢谢各位!
 
后退
顶部