以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关联查询 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=188843) |
-- 作者:朱女士 -- 发布时间: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_xx与right({ddqdb}.zzh_yy,2)相同。以此为条件取出ddpsb的发货日期和ddqdb的清单条码编码。 5)、然后以清单条码编码相同为条件,将发货日期填充到“实时工序计算表中”。 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 |
-- 作者:有点蓝 -- 发布时间: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 |
-- 作者:朱女士 -- 发布时间: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("实时工序计算表") |
-- 作者:有点蓝 -- 发布时间: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.清单条码编码" |
-- 作者:朱女士 -- 发布时间: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.清单条码编码"
|
-- 作者:有点蓝 -- 发布时间:2023/10/24 10:39:00 -- 更新的是后台数据库,界面有重新加载数据吗? |
-- 作者:朱女士 -- 发布时间:2023/10/24 10:52:00 -- 明白了,谢谢! |