2017-03-10 94 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

這也適用。謝謝你的幫助! –

相關問題