回答

收藏

SQL用于解析多行数据?

技术问答 技术问答 228 人阅读 | 0 人回复 | 2023-09-12

我的不幸任务是定期从数据中获取数据excel导入数据库如下:
$ v  p6 z( H! e) N" k9 |+ S        IssueID   References    1234      DocID1DocID2DocID3 1235      DocID1 1236          DocID2 1237        DocID2DocID3引用是一个多行文本字段。我想做的是创个和Issue表有一对多的关系Docs表,而不是有这些多行引用。
  n3 S- ~: K. O/ r3 P我定义了以下表格:% }! x" I; x2 J) Q; V
问题:IssueKey,IssueID,IssueFields
, Y% K2 i3 M) I1 t! L; YDoc:DocKey,DocID,DocRev,DocOwner等" U4 V; T1 D! y' V1 N
DocLink:LinkKey,DocKey,IssueKey" s# v+ S7 G) s8 V$ s) ^6 g
由于此操作将重复运行,因此Doc表将已经存在并定义了DocID。因此,我想做的是引用列中的每一个DocID进行查询或VBA如果不存在代码搜索,则基于IssueID添加链接。* A# l9 b! O; _2 s% ~1 @. ]$ ~0 ?
很简单,对吧?  ]8 g- Y3 y8 R4 u, {
杰夫
7 p) q3 r; j  ^8 s- ^/ R# g说明:  Q. k3 q0 P" y
1)我有第三列叫  Val1表明还有其他列,但这似乎让问题感到困惑。事实上,源表中有许多列(许多列,最被忽视的列),但我只关心以上两列。
: w. v/ ]/ b* L! h2)我不需要分析定界符或任何过于偏执的内容:引用一个或多个唯一定义的文档引用号(存储为文本)。LIKE筛选器将根据具体情况列出IssueID的列表。
) U: ]! N1 N3 W* i3)这是一个可接受输出的例子:
1 i4 r( N- O5 I0 }$ O9 J  G- N$ yIssueID   References1234    DocID11234    DocID21234    DocID31235     DocID11236    DocID21237    DocID21237    DocID3理想的解决方案是原始的excel表(顶)及以下两个表:% T+ s* Q: m0 y
IssueKey   IssueID   1234                                                                       123734  DocKey     DocID          DocID1 2                 DocID2  3        DocID3并填写/更新链接表:) ]- L' e& z) C5 j0 S
LinkKey  IssueKey  DocKey                                        3                  3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4)这是我期待解决方案的一个例子(创建在上面#3)。不幸的是,它使它成功了Access崩溃,所以我无法确定语法是否正确(编辑以反映上面的字段名称)。
0 _6 {* ?9 Q1 q( U) ASELECT Q1.IssueID,D1.DocIDFROM Docs AS D1,Issues AS Q1WHERE Q1.IssueID IN    ((SELECT Q2.IssueID from Issues AS Q2 where (Q2.References) Like D1.DocID));5)暂时放弃Access,我已经在MySQL以下工作进行了:* J9 M! }0 j8 n& a
SELECT Q1.IssueID,D1.DocIDFROM Docs AS D1,Issues AS Q1WHERE Q1.IssueID IN    ((SELECT Q2.IssueID from Issues AS Q2 where (Q2.References) Like '%DocID1%'));这可以像我预期的那样工作-我得到的每一个都是对的DocID1的引用的IssueID,表中的每一个Doc重复操作。根据上述数据,它看起来像:
3 r% [1 V; N3 Z+ \* dIssueID   References1234    DocID11234    DocID21234    DocID31235     DocID11235    DocID21235    DocID3现在,我只想将就’%DocID1%’替换为’%’  D1.DocID6 q! X# D  m( x, {8 x
    ’%’-将结果限制在实际匹配项的文档ID。由于某些原因,我这样做时得到的记录为零-我认为我有把通配符放在相关字段上的语法错误。( b7 D8 z4 c8 {( g2 |* K
6)以下工作可在MySQL中提供上述#3.但转换为访问的相同查询会使其崩溃:
5 S  F& m" ~2 X8 z6 n( Y; g' MSELECT Q1.IssueID,D1.DocIDFROM Docs AS D1,Issues AS Q1WHERE Q1.IssueID IN    ((SELECT Q2.IssueID from Issues AS Q2 where (Q2.References) Like                CONCAT('%',D1.DocID,);变成访问权限(’ ‘&D1.DocID&’    ‘)]: \8 k4 G0 ~. ]& B9 H
结论:访问很差. L$ t; Q  j$ n
                                                                ) `: n0 x8 z3 C; L5 {" X
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则