2017-12-25 16 views
1

二つの値に等しい選択カップルが、私は、たとえば、この2台を持って

+----+----+----+----+ +----+----+----+----+ 
| id | c1 | c2 | c3 | | id | c1 | c2 | c4 | 
+----+----+----+----+ +----+----+----+----+ 
| 10 | 50 | 55 | 20 | | 20 | 50 | 55 | 24 | 
+----+----+----+----+ +----+----+----+----+ 
| 12 | 15 | 10 | 70 | | 26 | 21 | 82 | 11 | 
+----+----+----+----+ +----+----+----+----+ 
| 18 | 15 | 10 | 88 | | 27 | 15 | 10 | 13 | 
+----+----+----+----+ +----+----+----+----+ 

私は私が取得する必要があります上記の例では、同じc1c2値でIDのカップルを取得したいですこの出力:あなたはちょうどこのように2つのテーブルを結合するために必要

+----+----+ 
| id | id | 
+----+----+ 
| 10 | 20 | 
+----+----+ 
| 12 | 27 | 
+----+----+ 
| 12 | 18 | 
+----+----+ 
| 18 | 27 | 
+----+----+ 
+0

@llyes Ghomraniは私の答えを確認してください。私は脚本を変更しました。 –

答えて

0

SELECT DISTINCT t1.id as id1, t2.id as id2 
FROM table1 AS t1 
INNER JOIN table2 AS t2 ON t1.c1 = t2.c1 AND t1.c2 = t2.c2 
UNION 
SELECT DISTINCT t1.id as id1, t2.id as id2 
FROM table1 AS t1 
INNER JOIN table1 AS t2 ON t1.c1 = t2.c1 AND t1.c2 = t2.c2 
         AND t1.id != t2.id 
UNION 
SELECT DISTINCT t1.id as id1, t2.id as id2 
FROM table2 AS t1 
INNER JOIN table2 AS t2 ON t1.c1 = t2.c1 AND t1.c2 = t2.c2 
         AND t1.id != t2.id; 

Results

| id1 | id2 | 
|-----|-----| 
| 10 | 20 | 
| 12 | 27 | 
| 18 | 27 | 
| 18 | 12 | 
| 12 | 18 | 
+0

これでは結果の3行目を得ることができません –

+0

@IlyesGhomrani 2番目のテーブルにid = 18はありませんか、それともテーブルに一致させたいですか? –

+0

はい。私は自分自身と他のテーブルと各テーブルを一致させたい。 –

0

はこれを試してみてください:

SELECT DISTINCT T1.ID AS ID1 ,T2.ID AS ID2 FROM TABLE_1 T1,TABLE_2 T2 
WHERE T1.C1 = T2.C1 AND 
T1.C2 = T2.C2 
UNION 
SELECT ID1,ID2 FROM (
    SELECT T1.ID AS ID1 , T2.ID 
    AS ID2 FROM TABLE_1 T1, TABLE_1 T2 
    WHERE T1.C1 = T2.C1 AND 
    T1.C2 = T2.C2 AND T1.ID! = T2.ID) 
WHERE (ID1,ID2) IN ((ID1,ID2),(ID2,ID1)) AND (ID2,ID1)IN ((ID1,ID2), 
(ID2,ID1)) AND ROWNUM = 1; 

の検索結果を:

| id1 | id2 | 
|-----|-----| 
| 10 | 20 | 
| 12 | 27 | 
| 18 | 12 | 
| 18 | 27 | 
+0

あなたはまた、2番目のテーブルと一致するセクションを追加する必要があるので、私は重複した値を取得する必要はありません –

関連する問題