我在同一台服务器上有两个数据库。我们将调用第一个数据库ActiDB,第二个数据库将调用DomiDB。在DomiDB上有一个名为DomiActV7的表,我们将处理这个表。在DomiActV7中有一个名为Domain的列和另一个称为NumOfClicks的空列。
现在让我们看看另一个名为ActiDB的数据库。有两张桌子对我们来说很重要。第一个表称为ActV7,第二个表称为SeV7。
需要做的是获取表中的NumOfClicks (数据库ActiDB),该表位于另一个数据库(DomiDB)中,为每个域组合在一起,并存储在名为NumOfClicks的空列中。
解释上层文本“每个域合并在一起”:ActV7中有一个电子邮件列表,DomiActV7中有一个域列表。域列表应该检查ActV7电子邮件并找到匹配的域(例如: test@testdomain.com是我们的电子邮件,testdomain.com是我们的域。查询在该电子邮件中找到了具有相同域的电子邮件,现在将使用行ID将我们连接到同一数据库中的另一个表,名为SeV7)我们可以从该行获得的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
示例表:来自DomiActV7的DomiDB
+-----------------+-----------------+
| Domain | NumOfClicks |
+-----------------+-----------------+
|thisisadomain.net| |
+-----------------+-----------------+
| moreexamples.com| |
+-----------------+-----------------+
...............ActV7来自ActiDB
+--------------------+-----------------+
| Email | SeV7OID (key) |
+--------------------+-----------------+
|example@examail.com | 1 |
+--------------------+-----------------+
|a@moreexamples.com | 3 |
+--------------------+-----------------+
.............SeV7来自ActiDB
+--------------------+-----------------+
| SeV7OID (key) | NumOfClicks |
+--------------------+-----------------+
| 3 | 41 |
+--------------------+-----------------+
| 4 | 22 |
+--------------------+-----------------+
| 1 | 65535 |
+--------------------+-----------------+
..................发布于 2017-08-02 09:06:29
这会产生预期的结果吗?
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.domainhttps://stackoverflow.com/questions/45454200
复制相似问题