2015-11-25 26 views
-2

我想在表中配對兩行。SQL與交叉值配對的行

 
ZZ XX PZZ PXX 
A B 1 2 
G E 5 9 
M N 4 4 
E H 7 4 
Q R 2 2 
T D 8 1 
H E 4 7 
B A 2 1 
L B 7 3 

我想配對行具有相同的值,但值交叉到其他列如下。 預期輸出:

 
ZZ XX PZZ PXX 
A B 1 2 
B A 2 1 
E H 7 4 
H E 4 7 
+4

整潔 - 你有一個問題? – Siyual

+0

是的,我編輯了我的問題。 –

+3

我仍然沒有看到任何問題......你能詳細說明你想要做什麼嗎?還請說明您爲解決問題所做的嘗試。我們不是代碼寫作服務。 – Siyual

回答

1

一個簡單INNER JOIN將做:

SELECT t1.ZZ, t1.XX, t1.PZZ, t1.PXX 
FROM mytable AS t1 
INNER JOIN mytable AS t2 
ON t1.ZZ = t2.XX AND t1.XX = t2.ZZ AND t1.PZZ = t2.PXX AND t1.PXX = t2.PZZ 

ON的條款做XXZZ之間PXXPZZ列F中的表之間的交叉匹配。

Demo here

+0

它的工作原理!謝謝。 –

1

使用一個EXISTS子句來檢查,如果存在兄弟姐妹。

select * 
from mytable 
where exists 
(
    select * 
    from mytable pair 
    where pair.zz = mytable.xx 
    and pair.xx = mytable.zz 
    and pair.pzz = mytable.pxx 
    and pair.pxx = mytable.pzz 
); 

或甚至IN子句簡單:

select * 
from mytable 
where (zz, xx, pzz, pxx) in 
(
    select xx, zz, pxx, pzz 
    from mytable 
); 

如果你想你的結果排序,使用ORDER BY以最少和最偉大:

order by least(xx, zz), greatest(xx, zz), zz, least(pxx, pzz), greatest(pxx, pzz), pzz;