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

标签 sql-server tsql email sql-server-2012 filtering

我很确定我遇到的问题是我不太确定如何清楚地提出我的问题,所以我无法搜索答案。但是这里...

我得到的数据看起来像这样(在此处进行了简化):

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/

相关文章:

sql - 从最大查询中选择列名

sql - 'IN'可以用在case语句中吗?

sql-server - 删除重复行并保留一行

sql - Sql 精简版的 CHECK/NOCHECK

java - 如何在java中将邮件作为另一封邮件的附件发送而不将其保存到磁盘

javascript - 通过电子邮件发送 Div 的内容

php - 在 PHP 的变量中包含 Foreach 循环的结果? (对于函数 mail() )

sql-server - SQlDependency 的权限

sql-server - 注册新的 SQL 2000 服务器时更改默认端口

sql-server - 读取派生列表达式