我在同一台服务器上有2个数据库。我们将调用我们的第一个数据库ActiDB
,第二个数据库将是DomiDB
。 DomiDB
上有一个名为DomiActV7
的表格,我们将在其中进行处理。在DomiActV7
中,有一列名为Domain
,另一列为空,名为NumOfClicks
。
现在让我们看一下名为ActiDB
的其他数据库。那里有2张桌子对我们很重要。第一个表称为ActV7
,第二个表称为SeV7
。
我需要做的是是获取表NumOfClicks
(数据库 SeV7
)中的ActiDB
另一个数据库(DomiDB
)为每个域组合在一起,并存储在名为NumOfClicks
的空列中。
解释上部文字" 为每个域组合在一起":ActV7
中有一个电子邮件列表,其中有一个DomiActV7
中的域名列表。域名列表应该检查ActV7
个电子邮件并找到匹配的域名(例如:test@testdomain.com是我们的电子邮件,testdomain.com是我们的域名。查询在该电子邮件中找到了具有相同域名的电子邮件,现在将使用该域名将我们连接到名为SeV7
的同一数据库中的另一个表的行ID。我们可以从具有加工域的电子邮件的行获取的ID称为SeV7OID
。使用此ID,我们可以进入另一个表SeV7
,我们可以找到NumOfClicks
。
既然我们找到了通往NumOfClicks
的路,我们需要以某种方式将它们合并在一起,因为在之前的表中会有更多具有相同域的电子邮件,这意味着它将为我们提供更多ID,从而导致更多NumOfClicks ..我需要将合并后的点击次数输回到第一个表DomiActV7
,还有一个特定的数字65535应该被视为数字1.这已经在现有的查询中实现。
应该更新所做的查询以查找ActV7
Email
然后获取SeV7OID
ID并使用该ID找到NumOfclicks并将其输入到其他数据库中。我希望我没有太复杂的事情,但我试图尽可能地解释这种情况。此处还有一个带有相似问题的旧帖子的链接:Link to the post
每个列数据类型为varchar(50),仅SeV7OID
,其他ID为INT。
此查询有什么问题,它确实导致
SeV7
中的电子邮件搜索错误,因为丢失的电子邮件多于此处 写在那个表中,这就是我们必须从ActV7
检查的原因 它存储了所有电子邮件。需要修改的现有查询:
UPDATE DomiDB..DomiActV7 SET NumOfClicks = a.NumOfClicks FROM DomiDB..DomiActV7 d JOIN (SELECT Domain, SUM(CASE WHEN e.NumOfClicks = 65535 THEN 1 ELSE e.NumOfClicks END) AS NumOfClicks FROM DomiDB..DomiActV7 d JOIN ActIDB..nact.SeV7 e ON '@'+d.Domain = right(e.Email,len(d.domain)+1)) a ON a.Domain=d.domain
示例表:来自DomiDB的 DomiActV7
+-----------------+-----------------+
| Domain | NumOfClicks |
+-----------------+-----------------+
|thisisadomain.net| |
+-----------------+-----------------+
| moreexamples.com| |
+-----------------+-----------------+
...............
来自ActiDB的ActV7
+--------------------+-----------------+
| Email | SeV7OID (key) |
+--------------------+-----------------+
|example@examail.com | 1 |
+--------------------+-----------------+
|a@moreexamples.com | 3 |
+--------------------+-----------------+
.............
来自ActiDB的SeV7
+--------------------+-----------------+
| SeV7OID (key) | NumOfClicks |
+--------------------+-----------------+
| 3 | 41 |
+--------------------+-----------------+
| 4 | 22 |
+--------------------+-----------------+
| 1 | 65535 |
+--------------------+-----------------+
..................
答案 0 :(得分:1)
这会产生预期的结果吗?
UPDATE d SET d.NumOfClicks = a.NumOfClicks
FROM DomiDB..DomiActV7 d JOIN
( SELECT d.domain,
SUM(CASE
WHEN e.NumOfClicks = 65535 THEN 1
ELSE e.NumOfClicks END) AS NumOfClicks
FROM
DomiDB..DomiActV7 d1
JOIN ActIDB..Actv7 aa ON '@'+d1.domain = right(aa.Email,len(d1.domain)+1)
JOIN ActIDB..SeV7 e ON e.SeV7OID = aa.SeV7OID
group by d1.domain
) a ON a.domain=d.domain