The*_*Doc 2 t-sql sql-server email filtering sql-server-2012
我很确定我遇到的问题是我不太确定如何清楚地提出我的问题,所以我无法搜索答案。但这里...
我得到的数据如下所示(此处简化):
ID | MailboxID | Connection | EmailID
0001 | M0001 | 1 | 9999
0002 | M0001 | 2 | 9999
0003 | M0002 | 1 | 9998
0004 | M0002 | 2 | 9998
0005 | M0002 | 2 | 9997
0006 | M0003 | 1 | 9996
Run Code Online (Sandbox Code Playgroud)
ID是主键,因此在表中是唯一的。MailboxID 指示存储邮件的邮箱。Connection 告诉我邮箱存在于哪个内部连接(基本上是任务 ID),而 EmailID 是电子邮件的唯一标识符。
我需要返回 MailboxID 和 EmailID 相等但连接不同的所有 ID。在上面的示例中,我想要返回这些行:ID 0001-0002、0003-0004。有人可以帮忙吗?
小智 7
假设没有空值,您的数字是整数,并且您的字符串没有需要修剪的空格:
CREATE TABLE [dbo].[Mailbox](
[ID] [int] NOT NULL,
[MailboxId] [varchar](10) NULL,
[Connection] [int] NULL,
[EmailId] [int] NULL,
CONSTRAINT [PK_Mailbox] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0001, 'M0001', 1, 9999);
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0002, 'M0001', 2, 9999);
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0003, 'M0002', 1, 9998);
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0004, 'M0002', 1, 9998);
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0005, 'M0002', 2, 9997);
INSERT INTO mailbox (ID, mailboxid, connection, emailid) Values (0006, 'M0003', 1, 9996);
select m1.Id, m2.id
from Mailbox m1, Mailbox m2
Where m1.id <> m2.id
AND M1.mailboxid = m2.mailboxid
and m1.emailid = m2.emailid
and m1.connection <> m2.connection
and m1.id < m2.id
Run Code Online (Sandbox Code Playgroud)
应该给你这个:
Id id
1 2
Run Code Online (Sandbox Code Playgroud)
您可以根据需要修剪邮箱 ID,并添加空检查(如果这也是一个问题)。
| 归档时间: |
|
| 查看次数: |
6012 次 |
| 最近记录: |