请问这个Sql语句该怎么写?

wsungox 2003-07-25 04:33:45
有两个表
表一 code表
字段 codename char(10)
ifcause char(60)

表二 check表
bh char(10)
name char(10)
result char(10)

其中表一的ifcause字段存放表二的result字段满足条件的条件语句 例如 substring(result,5,1)=1 或 substring(result,7,2)=10

那么表一,表二的连接该怎么写
我用
select code.codename,check.bh,check.name from code left outer join check on code.ifcause

select code.codename,check.bh,check.name from code,check where code.ifcause
都提示语句出错,这个连接语句该怎么写,或是用什么方法达到这种效果?
...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feihong0233 2003-07-26
  • 打赏
  • 举报
回复
不好意思,上面的语句有问题,
在SQL Server的调试器里调试了以下,把二进制的标志用十进制存储,然后表的结构改一下
Code表:
CodeName IfCause IfResult
普查正常 512 512
普查不正常 512 0
抽查正常 256 256
抽查不正常 256 0

Check表:
bh Name Result
7140000001 张三 512
7140000002 马二 1016
7140000003 李明 80
7140000004 李铁 329
7140000005 王朋 513

查询语句:
SELECT [Code].[CodeName],[Check].[bh],[Check].[Name]
FROM [Code],[Check]
WHERE ([Code].[IfCause] & [Check].[Result])=[Code].[IfResult]
ORDER BY [Code].[CodeName]

得到的结果集:
CodeName bh Name
-------------------- -------------------- --------
抽查不正常 7140000001 张三
抽查不正常 7140000003 李明
抽查不正常 7140000005 王朋
抽查正常 7140000002 马二
抽查正常 7140000004 李铁
普查不正常 7140000003 李明
普查不正常 7140000004 李铁
普查正常 7140000001 张三
普查正常 7140000002 马二
普查正常 7140000005 王朋


以上的结果是在SQL Server2000的查询分析器中调试的,
Access中我不会用逻辑与的运算,帮助也没找到。
不知道这个是不是你要的结果?
karach 2003-07-26
  • 打赏
  • 举报
回复
SELECT [Code].[CodeName], [Check].[bh], [Check].[Name]
FROM Code, [Check]
WHERE ([Code].[IfCause] AND [Check].[Result])=[Code].[IfCause]
ORDER BY [Code].[CodeName];
taosihai1only 2003-07-26
  • 打赏
  • 举报
回复
up
feihong0233 2003-07-25
  • 打赏
  • 举报
回复
解答方法:

Code表

CodeName IfCause
普查正常 1000000000
普查不正常 0111111111
抽查正常 0100000000
抽查不正常 1011111111

Check表

bh Name Result
7140000001 张三 1000000000
7140000002 马二 1111111000
7140000003 李明 0001010000
7130200001 李铁 0101001001
7120100001 王朋 1000000001


查询语句:
SELECT [Code].[CodeName], [Check].[bh], [Check].[Name]
FROM Code, [Check]
WHERE ([Code].[IfCause] AND [Check].[Result])=[Code].[IfCause]
ORDER BY [Code].[CodeName];


这个我试了一下在Access下不好用,
不知道Access下的逻辑与怎么写,回去用SQLServer试一试。
但是逻辑上这么写哈哈也许好用。
feihong0233 2003-07-25
  • 打赏
  • 举报
回复
(其实你的要求并不需要那么麻烦啊)
除此之外,我想你的check.result字段仅仅是个标志位,
那么其实你可以不用这种方法,你可以在ifcause字段里紧紧保留过滤位,
并且使用AND来判断你的结果,
比如相对于substring(check.result,1,1)=1过滤位就是1000000000
substring(check.result,2,1)=0的过滤位是0100000000

哈哈,我要下了语句你可以自己研究应该不难。
feihong0233 2003-07-25
  • 打赏
  • 举报
回复
ifcause在你而言应该是运算逻辑,
我感觉数据库的表应该是静态表,
除非你用面向对象的数据库之类的,
所以将这个类似宏代换的逻辑语句保存在数据库里只能将它看作静态数据,
那么就是说你在上面用的类似宏代换的语句不能存在于你使用的关系数据库,
不知道我说明白没有。

如果你想在数据库上使用复杂功能,建议你使用数据库保存静态数据,
而利用程序处理对象的动作,也就是说,
你可以利用一定的规律保存你的规则,比如上面所说的:
substring(check.result,1,1)=1
你所要保存的是第二个第三个substring的参数和对比结果,
那么你可以把它们保存在数据库中,
并且在VB里利用函数substring过滤你的选项。

除此外在MS Access Database的驱动中我记得是可以使用一些VB的基础函数的,
好像substring也包括在内,
如果可用你也可以用一个带有substring函数的SQL语句在Access数据库驱动下使用,
但是VB一定是没有宏代换函数的,呵呵,好像VF里面可以的。
wsungox 2003-07-25
  • 打赏
  • 举报
回复
两个表之间唯一有联系的就是code.ifcause 字段的值是一个 有关check.result的条件语句
例如 substring(check.result,1,1)=1

现在就是要通过ifcause字段里的值将两个表联系起来
code表
普查正常 substring(check.result,1,1)=1
普查不正常 substring(check.result,1,1)=0
抽查正常 substring(check.result,2,1)=1
抽查不正常 substring(check.result,2,1)=0
check表
7140000001 张三 1000000000
7140000002 马二 1111111000
7140000003 李明 0001010000
7130200001 李铁 0101001001
7120100001 王朋 1000000001
相当于 code.name="普通检查",code.ifcause="substring(check.result,1,1)=1" 表示
将check表中的普通检查正常的人数例出来,满足的条件就是 substring(check.result,1,1)=1
根据code,check表得出结果
普查正常 7140000001 张三
7140000002 马二
7120100001 王朋
普查不正常 7140000003 李明
7130200001 李铁
抽查正常 7140000002 马二
7130200001 李铁
...........

在此请教各位朋友!!!
zhangnan8312 2003-07-25
  • 打赏
  • 举报
回复
select a.codename,b.bh,b.name from (select codename from code)a FULL OUTER JOIN (select bh,name from check)b on a.codename=b.name

victorycyz 2003-07-25
  • 打赏
  • 举报
回复
至少,语法上,join ... on 后面应该是A=B的形式。或者用where,也是where A=B的形式。
victorycyz 2003-07-25
  • 打赏
  • 举报
回复
不明白你的意思。
sindyzhou 2003-07-25
  • 打赏
  • 举报
回复
這樣寫有語法錯誤是肯定的,至於怎樣寫才是對的我也不知道,而且你也沒有說清楚你的意思


我感覺做不到

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧