SQL 选择两列相等但第三列不同的行

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,并添加空检查(如果这也是一个问题)。