帮我看看这个sql语句 (100分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
sql server 7.0的问题:
销售单主表(表名为:dbo.salary_storage,字段area_id是关联地区字段):
id name area_id
1 吴国强 7
2 陈1 2

销售单从表(表名为:dbo.salary_detail,sid是自增字段,id与主表id关联,product_id
是关联货品字段,price是单价字段,quantity是数量字段)
sid id product_id price quantity
1 1 1 12.2
2 1 2 23.4
3 2 1 12.2
4 2 2 23.4
5 2 3 34.5

地区表(表名为:dbo.area)
id area
2 北京市
4 福建省
7 广西

货品库表(表名为:dbo.product_storage)
id product_name
1 新世纪女警表
2 新世纪女军表
3 新世纪男警表

如果我要查询销售从表的产品='新世纪女警表',我这样写:
SELECT s1.id,s1.name, s1.area_id from Salary_Storage s1, salary_detail s2,
product_storage p1, Area a1 where s1.area_id=a1.id and s1.id=s2.id and
s2.Id_productin=p1.id and p1.product_name='新世纪女警表'

这样dbo.salary_storgae显示数据:
id name area_id
1 吴国强 7
2 陈1 2

如果要查询销售主表的name='吴国强',我还是这样写:
SELECT s1.id,s1.name, s1.area_id from Salary_Storage s1, salary_detail s2,
product_storage p1, Area a1 where s1.area_id=a1.id and s1.id=s2.id and
s2.Id_productin=p1.id and s1.name='吴国强'

查询结果一条数据也没有,为何?

如果我要查询销售主表的地区='北京市'或'广西',也是这样写:
SELECT s1.id,s1.name, s1.area_id
from Salary_Storage s1, salary_detail s2,product_storage p1, Area a1
where s1.area_id=a1.id and s1.id=s2.id and s2.Id_productin=p1.id and
a1.area='广西'

查询结果也是没有数据显示。
我的问题是,如何写sql语句实现既可以查询销售从表的产品,也可以查销售主表的地区
和姓名?
 
这样可不可以:

SELECT t1.id,t1.name,t3.area,t4.product_name,
t2.price,t2.quantity
FROM salary_storage t1,
salary_detail t2,
Area t3,
product_storage t4
WHERE t1.id=t2.id and
t1.area_id=t3.id and
t2.product_id=t4.id

如果要查'广西' 则在WHERE中加 ( and t3.id=7 )
如果要查'吴国强'则在WHERE中加( and t1.name='吴国强' )
 
name 如果为char,no result.改为varchar.
 
to wufen:
--如果要查'广西' 则在WHERE中加 ( and t3.id=7 )
这样当然不行啦,用户是要求输入中文字的,而t3.id是内部字段,用户怎么可能知道值呢?
就算知道,也不好,不方便,用户毕竟是输入中文的。

你写的sql语句与我写的有什么区别:
SELECT s1.id,s1.name, s1.area_id from Salary_Storage s1, salary_detail s2,
product_storage p1, Area a1 where s1.area_id=a1.id and s1.id=s2.id and
s2.Id_productin=p1.id and s1.name='吴国强'

一样还是查不出来!

to Nose:
这样改是多余的,不用试,肯定不行。

哪位高手把解决掉。



 
我不是高手,但我还想说.
试试(and Rtrim(t3.area)='广西' )
 
SELECT t1.id,t1.name,t3.area,t4.product_name,t2.price,t2.quantity
FROM salary_storage t1, salary_detail t2, Area t3, product_storage t4
WHERE t1.id(+)=t2.id and t1.area_id(+)=t3.id and t2.product_id=t4.id
试试一定行!
 
to gerry yang:
不行!
 
SELECT s1.id,s1.name, s1.area_id from Salary_Storage s1, salary_detail s2,
product_storage p1, Area a1 where s1.area_id=a1.id and s1.id=s2.id and
s2.Id_productin=p1.id and s1.name='吴国强'

查询结果一条数据也没有,为何?
_________________________________
错误。s2.Id_productin如果是笔误应该为s2.product_id,这样会查到结果的。我已经
试验了。
___________________________________

我的问题是,如何写sql语句实现既可以查询销售从表的产品,也可以查销售主表的地区
和姓名?
______________________________________
这样写:
SELECT s1.name, s2.area,s3.price ,s4.char
from Salary_Storage s1, area s2,salary_detail s3,product_storage s4
where s1.area_id=s2.id and s1.id=s2.id and s3.product_Id = s2.id
and s4.id=s3.id and s2.area ='北京';
______________________________________
这样会查不到结果?按你的数据和表结构我试验查到了正确结果。sql-server7.0 nt4.0。

这是个很经典的sql查询语句的问题。 很多sql教材都有这个例子。 8-)

 
多人接受答案了。
 
后退
顶部