我很确定我遇到的问题是我不太确定如何清楚地提出我的问题,所以我无法搜索答案。但是这里...
我得到的数据看起来像这样(在此处进行了简化):
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
ID是主键,所以在表中是唯一的。 MailboxID 表示存储消息的邮箱。Connection 告诉我邮箱存在于哪个内部连接(基本上是任务 ID),而 EmailID 是电子邮件的唯一标识符。
我需要返回 MailboxID 和 EmailID 相同但连接不同的所有 ID。在上面的示例中,我想返回这些行:ID 0001-0002、0003-0004。任何人都可以伸出援手吗?
最佳答案
假设没有空值,您的数字是整数并且您的字符串没有需要修剪的空格:
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
应该给你这个:
Id id
1 2
如有必要,您可以修剪邮箱 ID 并添加空值检查(如果这也是一个问题)。
关于sql-server - SQL 选择两列相等但第三列不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728561/