【发布时间】:2013-05-17 18:01:00
【问题描述】:
为了在网格中显示数据,我必须构建 SQL 请求时遇到了一些问题。
我有如下的临时表(例如,我输入数字而不是电子邮件地址):
GroupID | Email1 | Email2
null | 1 | 2
null | 1 | 2
null | 1 | null
null | 3 | 1
null | 2 | 2
null | 4 | 2
null | 5 | 6
null | 6 | null
我需要更新表格以设置 GroupID,如下所述: 如果 email1 或 email2 匹配任何其他记录,则此记录需要与其他记录具有相同的 groupId。例如(使用上表):
GroupID | Email1 | Email2
**1** | 1 | 2
**1** | 1 | 2
**1** | 1 | null
**1** | 3 | 1
**1** | 2 | 2
**1** | 4 | 2
**2** | 5 | 6
**2** | 6 | null
我尝试过类似的方法:
UPDATE a
SET a.GroupId = b.GroupId
FROM #temp a
INNER JOIN (SELECT Email,
ROW_NUMBER() OVER (ORDER BY ISNULL(Email,'zzzzzzzz')) GroupId
FROM (SELECT Email1 Email
FROM #temp
GROUP BY Email1
UNION ALL
SELECT Email2 Email
FROM #temp
GROUP BY Email2
) c
GROUP BY Email
) b
ON a.Email1 = b.Email OR
a.Email2 = b.Email OR
(b.Email IS NULL AND a.Email1 IS NULL AND a.Email2 IS NULL)
但这不起作用我打算...例如,Email2等于Email 1的情况不被识别为同一组... 我怎样才能使这个请求按我的意愿工作?有可能吗??
[EDIT] 2013/15/17 14:15 :实际上,对于规则,我的意思是“如果 email1 或 email 2 与任何其他记录的 email1 或 email2 匹配,则应该属于相同的 groupID”
【问题讨论】:
-
我认为规则不完整:“如果 email1 或 email2 匹配任何其他记录,则此记录需要与其他记录具有相同的 groupId”。根据这条规则,给所有行赋予相同的 GroupID 是有效的。这更简单,更容易实现,但可能不是您需要的。那你还需要什么?
-
这是哪个 RDBMS(SQLite、SQLServer、MySQL 等)?
标签: sql sql-server-2008