CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

SQL语句请教

楼主dirace()2003-08-02 12:41:55 在 MS-SQL Server / 疑难问题 提问

碰到一个奇怪的问题:  
  SQL   Server   6.5,用下列语句查询  
  select   *   from  
  (   select   *   from   tb1  
      union  
      select   *   from   tb2)   tt  
  where  
      ((生产人1='123')   or   (生产人2='123'))  
  返回的结果集却是tb1和tb2的并,即全部纪录,包括生产人1生产人2  
  都不是123的记录。  
  如果where子句改为  
  where  
      (生产人1='123')  
  就可以返回如期结果,即生产人为123的结果。请问这是怎么回事?  
  3x     //bow  
  问题点数:50、回复次数:13Top

1 楼leimin(黄山光明顶)回复于 2003-08-02 13:05:31 得分 0

TRY:  
  select   *   from  
  (   select   *   from   tb1  
      union  
      select   *   from   tb2)   tt  
  where  
      (TB1.生产人1='123')   or   (TB2.生产人2='123')  
  Top

2 楼CrazyFor(冬眠的鼹鼠)回复于 2003-08-02 13:09:56 得分 0

select   *   from  
  (   select   *   from   tb1  
      union  
      select   *   from   tb2)   tt  
  where  
      (TB1.生产人1='123')   or   (TB2.生产人2='123')  
   
  应该没有问题的,你检查一下,你的语句是只要有一个为123就满足你的条件了.Top

3 楼txlicenhe(马可)回复于 2003-08-02 13:39:45 得分 0

select   *   from  
  (   select   *   from   tb1  
      union  
      select   *   from   tb2)   tt  
  where  
      '123'   in   (TB1.生产人1,TB2.生产人2)  
   
  Top

4 楼dirace()回复于 2003-08-02 14:10:24 得分 0

可是tb1和tb2都有生产人1和生产人2这两个字段。这两个表是结构相同(才能union)记录不同的表。该句子的意思是试图选出有生产人“123”   参与的记录,即对某产品(某条记录)而言,“123”这个人要么生产了前半段(作为生产人1),要么生产了后半段(作为生产人2)  
  表格式如下:  
  生产人1     生产人2     日期     检验员      
      123           456         03-7-1     001  
      john         tom         03-7-1     001Top

5 楼caiyunxia(夏才云)回复于 2003-08-02 14:19:49 得分 0

没问题Top

6 楼qianguob(不懂编程)回复于 2003-08-02 14:24:43 得分 0

select   *   from    
  tbl1   a   ,tbl2   b     where   (a.生产1='123'   or   a.生产2='123')  
  and   (b.生产1='123'   or   b.生产2='123')  
   
  不知道这样是否可以,  
  还是不太明白你的意思,你是不是就是想要生产人为123   的记录啊。  
  Top

7 楼dirace()回复于 2003-08-02 14:27:17 得分 0

caiyunxia你是说语句没有问题吗?可是我为什么在SQL   Server   6.5上运行出上述的问题呢?Top

8 楼txlicenhe(马可)回复于 2003-08-02 14:32:21 得分 30

Select   *   from   tb11   where   '123'   in   (生产人1,生产人2)  
  union    
  Select   *   from   tb12   where   '123'   in   (生产人1,生产人2)  
   
  or    
   
  Select   *   from   tb11   where   生产人1='123'   or   生产2='123'  
  union    
  Select   *   from   tb12   where   生产人1='123'   or   生产人2='123'  
  Top

9 楼sdhdy(大江东去...)回复于 2003-08-02 14:32:50 得分 20

try;  
   
  select   *   from   tb1   where   生产人1='123'   or   生产人2='123'  
  union  
  select   *   from   tb2   where   生产人1='123'   or   生产人2='123'  
  Top

10 楼dirace()回复于 2003-08-02 14:45:54 得分 0

我尝试一下吧。在SQL   Server2000中就没有上述所说的问题。奇怪的很。Top

11 楼eastpond(东塘)回复于 2003-08-02 14:50:42 得分 0

同意楼上Top

12 楼dirace()回复于 2003-08-02 15:10:12 得分 0

干脆这样吧,我把要做的问题描述出来,各路高手来指点:      
      表结构如下  
  生产人1     产量1     生产人2     产量2       ......  
      201           0.2         203             0.4         ......  
      204           0.3         201             0.5         ......  
      201           0.2         204             0.6         ......  
      要求将生产人“201”的产量累加起来,不论他是以生产人1的身份,还是以生产人2的身份参与的。两张表里面都有记录。  
      我初始的想法是先把涉及某个生产人的记录选出来,就是第一贴说到的union,再做相应的累加。现在直接向各位请教吧。谢谢了。Top

相关问题

  • 求SQL语句
  • sql语句。
  • sql语句?
  • sql 语句?
  • 求SQL语句
  • ***求SQL语句***
  • sql语句??
  • sql语句
  • sql语句
  • SQL语句

关键词

  • 语句
  • sql
  • tb
  • 生产人
  • ttwhere
  • 生产
  • 记录
  • union
  • 产量
  • 表

得分解答快速导航

  • 帖主:dirace
  • txlicenhe
  • sdhdy

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo