2014-01-29 46 views
0

我需要選擇命令來執行以下操作:檢查行對同一條目

我有一個表像這樣

ID | col1 | col2 | ... 
23 | AAA | BBB | ... 
23 | BBB | AAA | ... 
59 | asf | 567 | ... 
02 | XXX | ZZZ | ... 
02 | YYY | XXX | ... 

有有時兩行用相同的ID。現在我想選擇這個,它們在兩個特定列(這裏是col1,col2)中也有相同的直徑相鄰條目,就像示例中的前兩行一樣。並且通過類比這些具有相同ID但不同條目的(參見最後兩行)。

至於我想有兩個表的例子的結果:

ID | col1 | col2 | ... 
23 | AAA | BBB | ... 
23 | BBB | AAA | ... 

ID | col1 | col2 | ... 
02 | XXX | ZZZ | ... 
02 | YYY | XXX | ... 

我集團通過其數,但沒有大的

+0

2表或2行? – Mihai

+0

你想將一張桌子變成兩張新桌子嗎?或者你想要一個SELECT查詢,它會給你兩個你說明的結果集? –

+0

是的,我想要一個簡單的選擇,對不起,誤導 – user3165675

回答

0

什麼你需要的是你的桌子的自我加入,使用標準做三件事:

  1. 比賽ID號
  2. 附上COL1/COL2鄰居加入您想要
  3. 排除各行的加入到自己。

此查詢可以做到。

SELECT a.id, a.col1, a.col2 
    FROM tbl AS a 
    JOIN tbl AS b ON 
     ( a.id=b.id 
     AND (a.col1 = b.col2 OR a.col2 = b.col1) 
     AND (a.col1 != b.col1 AND a.col2 != b.col2) 
    ) 

這是小提琴。 http://sqlfiddle.com/#!2/3cd08/2/0

+0

哇謝謝很多 – user3165675

1
SELECT t0.* 
    FROM test t0 
    JOIN test t1 ON ((t0.ID=t1.ID) AND 
        (t0.col1=t1.col2 AND t0.col2=t1.col1)); 

+----+------+------+ 
| ID | col1 | col2 | 
+----+------+------+ 
| 23 | BBB | AAA | 
| 23 | AAA | BBB | 
+----+------+------+ 

SELECT t0.* 
    FROM test t0 
    JOIN test t1 ON (NOT (t0.col1=t1.col1 AND t0.col2=t1.col2) AND 
        (t0.ID=t1.ID) AND 
        (t0.col1<>t1.col2 OR t0.col2<>t1.col1)); 
+----+------+------+ 
| ID | col1 | col2 | 
+----+------+------+ 
| 2 | YYY | XXX | 
| 2 | XXX | ZZZ | 
+----+------+------+