gpt4 book ai didi

mysql - 进展 OpenEdge、ODBC、记录集、加入,天哪

转载 作者:行者123 更新时间:2023-11-29 08:08:31 28 4
gpt4 key购买 nike

这里很沮丧。我不是数据库管理员,但可以绕过。我正在针对 Progress OpenEdge 数据库编写一些 ODBC 查询,我们只能查看该数据库。很长一段时间以来都没有出现任何问题,直到最近他们更改了数据结构,谁知道为什么,他们将客户电话号码移到自己的名为“联系人”的表中,而之前它们位于“cif”中,其中地址等仍然保留.

他们没有为每个客户创建一行并为每个电话号码创建一个字段,而是使用 0-4 代码、号码/电子邮件和客户。因此,如果客户有 4 个电话号码,则他们有 4 行重复的不同代码、联系人字段和客户姓名。

我正在尝试将“联系人”表与“cif”表连接起来,以便它返回“cif”中每次提到的客户,无论它在“cif”中列出多少次,但包括所有关联的电话号码来自每行中的“联系人”。

简化后的表结构如下:

Table "contact"

code | contact(#) | customer
--------------------------------
0 | (123)456-7890 | ABC Corp
1 | (123)456-7891 | ABC Corp
0 | (987)654-3210 | CBA Inc


Table "cif"

customer | b_in_low | b_in_high
----------------------------------
ABC Corp | 50.45 | 134.66
ABC Corp | 64.45 | 188.99
CBA Inc | 12.56 | 890.33

我试图返回的是“cif”中每一行的连接行,但包含“contact”中的所有号码,因此上表将返回:

rsRow1) ABC Corp, 0, (123)456-7890, 1, (123)456-7891, 50.45, 134.66

rsRow2) ABC Corp, 0, (123)456-7890, 1, (123)456-7891, 64.45, 188.99

rsRow3) CBA Inc, 0, (987)654-3210,,, 12.56, 890.00

我不想要什么:

rsRow1) ABC 公司,0,#,50.45,134.66

rsRow2) ABC 公司,1,#,50.45,134.66

rsRow3) ABC 公司,0,#,64.45,188.99

rsRow4) ABC 公司,1,#,64.45,188.99

rsRow5) CBA Inc,0,#,12.56 | 890.00

有道理吗?我可以让它在“cif”表上通过一个 rs 工作,并在每个重复区域期间,使用“cif.customer”作为 WHERE 过滤器对“contact”执行另一个查询,但显然它非常慢,并且可能会导致数千个查询。

我可以让它只从“cif”返回 1 行,但只从“contact”返回 1 个号码

我可以让它返回最多 5 个重复的“cif”行,每个行有 5 个不同的电话号码。

简而言之,如何高效地从“cif”获取 1 行,同时列出“contact”中的所有 +-5 电话号码?

最佳答案

这个怎么样:

SELECT c.customer
, ISNULL(c1.code,'')
, ISNULL(c1.contact,'')
, ISNULL(c2.code,'')
, ISNULL(c2.contact,'')
, ISNULL(c3.code,'')
, ISNULL(c3.contact,'')
, ISNULL(c4.code,'')
, ISNULL(c4.contact,'')
, ISNULL(c5.code,'')
, ISNULL(c5.contact,'')
, c.b_in_low
, c.b_in_high
FROM CIF AS c
LEFT OUTER JOIN Contact AS c1
ON c1.customer = c.customer
AND c1.code = 0
LEFT OUTER JOIN Contact AS c2
ON c2.customer = c.customer
AND c2.code = 1
LEFT OUTER JOIN Contact AS c3
ON c3.customer = c.customer
AND c3.code = 1
LEFT OUTER JOIN Contact AS c4
ON c4.customer = c.customer
AND c4.code = 1
LEFT OUTER JOIN Contact AS c5
ON c5.customer = c.customer
AND c5.code = 1

这取决于返回的“代码”字段的类型,如果您希望它为空,您可能需要进行另一次翻译。

不太漂亮,但我认为它有效。

关于mysql - 进展 OpenEdge、ODBC、记录集、加入,天哪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210975/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com