2017-03-10 81 views
0

我很确定我遇到的问题是我不太清楚如何清楚地询问我的问题,所以我无法搜索答案。但在这里不用...SQL选择两列相等的行,但第三行不同

我有,看起来像这样(简体这里)数据:

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是电子邮件的唯一标识符。

我需要返回邮箱ID和EmailID相等但连接不同的所有ID。在上面的例子中,我想要返回这些行:ID 0001-0002,0003-0004。任何人都可以伸出援助之手?

+0

根据你的问题,我不明白你为什么要0003-0004返回。 – TDP

+0

糟糕...复制/粘贴错误。 0004的连接应该是2.我会编辑。谢谢你的收获。 –

回答

3

假设有没有空,你的号码是整数,你的字符串没有空格需要被修剪:

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

+0

工程很棒。谢谢! –

2

也许你想这样的事情:通过邮箱ID和EMAILID

select a.ID, b.ID 
from tableName a 
join tableName b 
on a.ID > b.ID 
and a.MailboxID = b.MailboxID 
and a.EmailID = b.EmailID 
and a.Connection <> b.Connection 

另一种方法是组和显示所有的ID和所涉及的每个特定组的连接。

+0

这也适用。谢谢你的帮助! –

相关问题