请大家看下这个查询任务怎么写(100)

  • 主题发起人 主题发起人 Yang.SZ
  • 开始时间 开始时间
Y

Yang.SZ

Unregistered / Unconfirmed
GUEST, unregistred user!
三个表:主表(Main):billno, number, num, sales 10001 XY00001 10 12.5 10001 XM00001 5 25 ..... ....... .. ....从表1(Med) :number, name, units, stand XY00001 桂林西瓜霜 瓶 2.5g ....... .......... .. .....从表2(item):number, name, units XM00001 床费 元/日 ....... .... .....************************************************************************我想要的结果是:billno, number, name, units, stand, num, sales10001 XY00001 桂林西瓜霜 瓶 2.5g 10 12.510001 XM00001 床费 元/日 None 5 25..... ....... .... ... ... .. ...这个查询该怎么写啊???
 
select a.billno,a.number,case when b.name is null then c.name else b.name end name,case when b.units is null then c.units else b.units end,b.stand,a.num,a.salesfrom main aleft joinmed b on a.number=b.numberleft joinitem con a.number=c.number
 
不好使 提示SQL CASE构造错误 是不是版本的事啊? 我这是2000版本的 而且不能用is null来判断吧??? 改成 not in b.number 感觉到是可以 但这样的话 速度应该会很慢吧?? 这个表可是读取量和存入量都很大的表啊 速度慢的话就死定了
 
你用的是什么数据库啊???我在sql server2005下试了,可以使用的,我估计在sql server 2000下也应该可以。
 
我写的这个语句,是SQL标准语句,在我印象中,sql server 2000及后应该都可用;oracle 10G及以后应该都可用,之前的版本case when 语句可能要改一下;如果是access,那就麻烦了,case when 语句不可用,好象是另一个写法,而且表连接也要改一下。
 
我用的是SQLServer2000 用你的方法查出来的效果是:billno number name units stand num sales10001 XY00001 桂林西瓜霜 瓶 2.5g 10 12.510001 XM00001 <NULL> <NULL> <NULL> 5 25
 
select b.billno,a.number,a.name,a.units,a.stand,b.num,b.salesfrom Med a Left Join Main b on a.number=b.numberunion allselect d.billno,c.number,c.name,c.units,''as stand,d.num,d.salesfrom item c Left Join Main d on c.number=d.number这个SQL应该可以满足你的要求。
 
是的,楼上的应该是不错的。我的我自己再看看吧。
 
后退
顶部