我在同一台服务器上有两个数据库。我们将调用第一个数据库ActiDB
,第二个数据库DomiDB
。在DomiDB
上有一个名为DomiActV7
的表,我们将对此进行研究。在DomiActV7
中,有一列名为Domain
,另一列为空,名为NumOfClicks
。
现在让我们看看另一个名为ActiDB
的数据库。那里有两张对我们很重要的桌子。第一个表称为ActV7
,第二个表称为SeV7
。
我需要做的是将另一个数据库(NumOfClicks
)中的表SeV7
(databaseActiDB
)中的DomiDB
合并到每个域中,并存储在名为NumOfClicks
的空列中。
解释上面的文本“为每个域组合在一起”:在ActV7
中有一个电子邮件列表,在DomiActV7
中有一个域列表。域列表应该检查ActV7
电子邮件并找到匹配的域(例如:test@test domain.com是我们的电子邮件,testdomain.com是我们的域)。查询在该电子邮件中找到了具有相同域的电子邮件,现在将使用将我们连接到同一数据库中名为SeV7
的另一个表的行ID。我们可以从包含maching domain的电子邮件所在的行获取的ID称为SeV7OID
。有了这个id,我们可以进入另一个表SeV7
,在那里可以找到NumOfClicks
。
现在我们找到了NumOfClicks
的方法,我们需要以某种方式将它们合并在一起,因为在前面的表中会有更多的具有相同域的电子邮件,这意味着它会给我们更多的id,从而导致更多的numofclick。我需要输入第1个表的点击次数,还有一个特定的数字65535应该被视为数字1。这已经在现有查询THO中实现。
所做的查询应该更新为在DomiActV7
中查找ActV7
,然后获取Email
id,使用该id,它应该找到numofclicks并将它们输入到另一个数据库中。我希望我没有把事情弄得太复杂,但我正在尽可能地解释情况。这里还有一个链接到一个类似的问题:Link to the post
每个列的数据类型都是varchar(50),只有SeV7OID
和其他id是int。
此查询在SeV7OID
中执行直接电子邮件搜索有什么问题这是错误的,因为缺少的电子邮件比那里多
是写在那张表上的,所以我们必须从SeV7
里面有所有的邮件。
需要修改的现有查询:ActV7
示例表:domictv7 from domidb
+-----------------+-----------------+
| Domain | NumOfClicks |
+-----------------+-----------------+
|thisisadomain.net| |
+-----------------+-----------------+
| moreexamples.com| |
+-----------------+-----------------+
...............
actidb提供的actv7
+--------------------+-----------------+
| Email | SeV7OID (key) |
+--------------------+-----------------+
|[email protected] | 1 |
+--------------------+-----------------+
|[email protected] | 3 |
+--------------------+-----------------+
.............
来自actidb的sev7
+--------------------+-----------------+
| SeV7OID (key) | NumOfClicks |
+--------------------+-----------------+
| 3 | 41 |
+--------------------+-----------------+
| 4 | 22 |
+--------------------+-----------------+
| 1 | 65535 |
+--------------------+-----------------+
..................
最佳答案
这会产生预期的结果吗?
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