Foxtable(狐表)用户栏目专家坐堂 → [讨论]SQL语句中关联字段的求助 6日更新问题在8楼


  共有2826人关注过本帖树形打印复制链接

主题:[讨论]SQL语句中关联字段的求助 6日更新问题在8楼

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
[讨论]SQL语句中关联字段的求助 6日更新问题在8楼  发帖心情 Post By:2015/9/21 21:47:00 [只看该作者]

假定有二表,分别是合同或生产计划,结构如下:

合同表:
合同号  公司  产品
A001   01    AAA
A002   02    BBB

生产计划表:
原料编号  配属合同号
XXX       A001|A002
生产计划表的配属合同号的意思是 所投的料用于合同号A001与A002这二份合同

我希望这二张表关联起来,让我能查到合同表中的各个合同是否有对应的生产计划,即生产部已经安排生产。 
合同号  公司  产品  原料编号  配属合同号 
A001   01    AAA  XXX       A001|A002
A002   02    BBB  XXX       A001|A002
这样的查询语句应该如何写?
[此贴子已经被作者于2015/10/6 20:02:23编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/21 22:01:00 [只看该作者]

用inner join

 

from {合同} a inner join {生产计划} b on b.合同号 like ("%" + a.合同号 + "%")

 

-----------

 

select * f rom {表A} a inner join {表B} b on b.第一列 like ("%" + a.第一列 + "%")


 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/9/22 11:19:00 [只看该作者]

老师,直接用SQL语句我看的有点累,我是用查询表生成器做的,下面的例子是基于合同表中合同号与生产计划表中合同号一一对应写的,现在根据我1楼的情况,帮我改下代码。谢谢!

Dim jb As New SQLJoinTableBuilder("查询表1","合同")
jb
.ConnectionName = "ShcsErpSql"
jb
.AddTable("合同","合同号","生产计划","配属合同号")
jb
.AddCols("合同号","公司","产品", "原料编号","配属合同号")
Tables
("合同配属查询_Table1").Fill(jb.BuildSql,"ShcsErpSql",True)

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/22 11:25:00 [只看该作者]

用代码不能做。必须用sql语句才行。

 

select 合同号,公司,产品,原料编号,配属合同号 f rom {合同} a inner join {生产计划} b on b.配属合同号 like ("%" + a.合同号 + "%")

 


 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/9/30 12:52:00 [只看该作者]

今天在用上面的代码时,想加个where,但不成功,是不能加吗?
select 合同号,公司,产品,原料编号,配属合同号 f rom {合同} a inner join {生产计划} b on b.配属合同号 like ("%" + a.合同号 + "%") Where {合同} .[_Identify] Is Null

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/9/30 13:17:00 [只看该作者]

你表格主要关联字段居然是合并在一起的,这两个表的关联将可能出现不唯一的情况,应该这样设计

合同表:
合同号  公司  产品
A001   01    AAA
A002   02    BBB

生产计划表:
原料编号  ……
AA11
AA12
关联表
关联1 关联2
A001  AA11
A002  AA11
然后内关联这三张表格就可以完成一组多对多关联了

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/30 14:21:00 [只看该作者]

可以加条件,但条件必须是有效的条件啊,不满足条件自然不会显示啊

 

select 合同号,公司,产品,原料编号,配属合同号 f rom {合同} a inner join {生产计划} b on b.配属合同号 like ("%" + a.合同号 + "%") Where a.合同号 = "123456"

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/10/6 19:55:00 [只看该作者]

我加“Where {合同} .[_Identify] Is Null”的目的就是显示一张查不到结果的空表,在窗口打开后的table能显示一个空表,但有各字段名,我一直用这个办法实现这种功能,请问老师在这里的有JOIN代码中如何实现。 
[此贴子已经被作者于2015/10/6 20:02:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/7 10:18:00 [只看该作者]

直接写 where 1=2 即可,不行,就做个例子上来看看

 回到顶部