0

分かりませんでした。申し訳ありません。

以下は、私のデータベースのテーブルの1つです

col1 col2  type  
  1     2    3  
  2     1    4  
  1     3    0   
  1     4    0

今、私の参加自体は、次のような結果を取得しようとしています

  1 - 2 - 3 
  1 - 3 - 0 
  1 - 4 - 0 

しかし、できません。

表の場合、たまたま次のようなデータがある場合

Col1    Col2 
 1   -  2  
 2   -  1

結果には、タイプに基づいて決定される 1-2 または 2-1 のいずれかの行が 1 つだけ含まれている必要があります。

私は過去2時間から結合を試みてきましたが、1つのクエリだけでは正確に実行できません.

内部クエリを使用できますが、可能な解決策を検討したいので、最終的に内部クエリを使用します。

4

2 に答える 2

1

MySQL で 2 つの列のすべての個別の組み合わせを取得する方法に非常によく似て います

私の解決策は次のとおりです。

select t1.col1, t1.col2, t1.type
from table t1 join table 
           t2 on t1.col1 = t2.col2 and t1.col2 = t2.col1 and t1.col1 < t2.col1

union

select t1.col1, t1.col2, t1.type
from table t1
where not exists (select 1 from table where col1 = t1.col2 and col2 = t1.col1)
于 2012-09-24T13:17:02.387 に答える
0

私が正しく理解していれば、あなたが探しているものはまったく参加する必要はありません。タイプに加えて、col1 と col2 から、順序に関係なく、個別のペアが必要です。これは、他のいくつかの操作と一緒の集計です。

select mincol, maxcol, type
from (select (case when col1 < col2 then col1 else col2 end) as mincol,
             (case when col1 < col2 then col1 else col2 end) as maxcol,
             type
      from t
     )
group by mincol, maxcol, type
order by 1, 2, 3

最小の型制約に基づいて、あなたが望むように見えるのは、これの小さなバリエーションです:

select mincol, maxcol, min(type) as type
from (select (case when col1 < col2 then col1 else col2 end) as mincol,
             (case when col1 < col2 then col1 else col2 end) as maxcol,
             type
      from t
     )
group by mincol, maxcol
order by 1, 2
于 2012-09-24T13:18:54.567 に答える