Foxtable(狐表)用户栏目专家坐堂 → 关联查询


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

主题:关联查询

美女呀,离线,留言给我吧!
朱女士
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
关联查询  发帖心情 Post By:2023/10/24 6:45:00 [只看该作者]

老师您好!
 我有个问题还得麻烦您!

我的这里有三个表:

1)、订单评审表(ddpsb),ddpsb里的字段有:发货日期,制造令号(zzh),zzh_xx

2)、订单清单表(ddqdb),ddqdb的字段有:清单条码编码,zzh,zzh_yy

3)、实时工序计算表,字段有:清单条码编码,发货日期

4)、本模块实现的目的是填充“实时工序表”里的“发货日期”的数据。发货日期为空的不填充。这三个表的关联条件是:ddpsb<->ddqdb关联是zzh相同,{ddpsb}.zzh_xxright({ddqdb}.zzh_yy,2)相同。以此为条件取出ddpsb的发货日期和ddqdb的清单条码编码。

5)、然后以清单条码编码相同为条件,将发货日期填充到“实时工序计算表中”。

6)、这里判断的条件是:首先是{ddpsb}.zzh={ddqdb}.zzh,然后是区分{ddpsb}.zzh_xx是否为空,如果不为空,同时满足另一个条件:{ddpsb}.zzh_xx=right({ddqdb}.zzh_yy,2) ,最后如果{ddpsb}.zzh_xx为空,就直接查询{ddqdb}.清单条码编码和{ddpsb}.发货日期
7、我用的临时表,然后再逐条更新到“实时工序计算表”中,您还有否简捷办法。

 我下面的代码:出现错误“case附近有语法错误”
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("清单条码编码", GetType(String), 32)
dtb.AddDef("zzh", GetType(String), 32)
dtb.AddDef("zzh_xx", GetType(String), 32)
dtb.AddDef("zzh_yy", GetType(String), 32)
dtb.AddDef("发货日期", GetType(Date))
dtb.Build()

Dim cmd As New S  QLCommand
Dim dt As DataTable
c md.C

c  md.CommandText = "S  elect 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy From {ddpsb} right Join {ddqdb} case when {ddpsb}.zzh_xx is not null and {ddpsb}.zzh_xx = right({ddqdb}.zzh_yy,2) else {ddpsb}.zzh_xx is null end On {ddpsb}.zzh = {ddqdb}.zzh  where {ddpsb}.发货日期 Is Not null"
dt = cmd.ExecuteReader()

For Each dr1 As DataRow In dt.DataRows
    Dim dr2 As DataRow = DataTables("统计").AddNew()
    dr2("清单条码编码") = dr1("清单条码编码")
    dr2("zzh") = dr1("zzh")
    dr2("zzh_xx") = dr1("zzh_xx")
     dr2("zzh_yy") = dr1("zzh_yy")
    dr2("发货日期") = dr1("发货日期")
Next

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/24 8:44:00 [只看该作者]

如果这3个表都是同一个数据库的,直接使用sql的update更新即可。

关联条件是无法使用case when的,上面sql改为下面sql

select 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy from {ddpsb} right Join {ddqdb} on {ddpsb}.zzh = {ddqdb}.zzh and  {ddpsb}.zzh_xx is not null and {ddpsb}.zzh_xx = right({ddqdb}.zzh_yy,2)  where {ddpsb}.发货日期 Is Not null
union
select 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy from {ddpsb} right Join {ddqdb} on {ddpsb}.zzh = {ddqdb}.zzh and  {ddpsb}.zzh_xx is null  where {ddpsb}.发货日期 Is Not null

 回到顶部
美女呀,离线,留言给我吧!
朱女士
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2023/10/24 9:30:00 [只看该作者]

老师您好!
  还是上面的模块,我后面绿色部分代码运行错误:对象名 '临时表' 无效。
该模块完整代码如下:
Dim dtb As New DataTableBuilder("临时表")
dtb.AddDef("清单条码编码", GetType(String), 32)
dtb.AddDef("发货日期", GetType(Date))
dtb.Build()
Dim c md As New S QLCommand
Dim dt As DataTable
c md.C
c md.CommandText = "S  elect 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy From {ddpsb} right Join {ddqdb} On {ddpsb}.zzh = {ddqdb}.zzh And {ddpsb}.zzh_xx Is Not null And {ddpsb}.zzh_xx = right({ddqdb}.zzh_yy, 2) Where {ddpsb}.发货日期 Is Not null"
dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    Dim dr2 As DataRow = DataTables("临时表").AddNew()
    dr2("清单条码编码") = dr1("清单条码编码")
    dr2("发货日期") = dr1("发货日期")
Next
Dim dt1 As DataTable
c md.C ommandText = "S elect 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy From {ddpsb} right Join {ddqdb} On {ddpsb}.zzh = {ddqdb}.zzh And {ddpsb}.zzh_xx Is null Where {ddpsb}.发货日期 Is Not null"
dt1 = c md.ExecuteReader()
For Each dr3 As DataRow In dt1.DataRows
    Dim dr4 As DataRow = DataTables("临时表").AddNew()
    dr4("清单条码编码") = dr3("清单条码编码")
    dr4("发货日期") = dr3("发货日期")
Next
c md.C ommandText = "u pdate a set a.发货日期=b.发货日期 from 实时工序计算表 as a inner join 临时表 as b on a.清单条码编码=b.清单条码编码"

c md.ExecuteNonQuery()

MessageBox.Show("更新完毕")
MainTable = Tables("实时工序计算表")

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/24 9:37:00 [只看该作者]

sql只能使用数据库里有的表,不能使用临时表
c md.C ommandText = "u pdate a set a.发货日期=b.发货日期 from 实时工序计算表 as a inner join (S elect 清单条码编码, 发货日期, {ddpsb}.zzh, {ddqdb}.zzh, zzh_xx, zzh_yy From {ddpsb} right Join {ddqdb} On {ddpsb}.zzh = {ddqdb}.zzh And {ddpsb}.zzh_xx Is null Where {ddpsb}.发货日期 Is Not null) as b on a.清单条码编码=b.清单条码编码"

 回到顶部
美女呀,离线,留言给我吧!
朱女士
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2023/10/24 10:21:00 [只看该作者]

老师:这条语句没有执行更新,就是说“实时工序计算表”的发货日期还是空。还得麻烦您!
c md.C ommandText = "u date a set a.发货日期=b.发货日期 from {实时工序计算表} as a inner join (S elect 清单条码编码,发货日期,{ddpsb}.zzh,{ddpsb}.zzh_xx,{ddqdb}.zzh_yy From {ddpsb} right Join {ddqdb} On {ddpsb}.zzh = {ddqdb}.zzh And {ddpsb}.zzh_xx Is null Where {ddpsb}.发货日期 Is Not null) as b on a.清单条码编码=b.清单条码编码"

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/24 10:39:00 [只看该作者]

更新的是后台数据库,界面有重新加载数据吗?

 回到顶部
美女呀,离线,留言给我吧!
朱女士
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2023/10/24 10:52:00 [只看该作者]

明白了,谢谢!

 回到顶部