2016-06-28 8 views
-1

SQL言語でデータを照会するために作成したデータベースの1つのテーブルにファイルの値をコピーしました。 Dbは通常の形ではありません、私はフィールドに値をコピーしました。 フィールドf1の同じ値で、すべてのレコードに対して同じ値のf2があるかどうかを確認することになります。列の値がコヒーレントに別の列にマップされているかどうかを調べる

f1の異なる値がf2の同じ値に関連付けられることもありますが、問題はありません。チェックが両方向(f1→f2とf2→f1)で正の場合は、明らかに2つのフィールドが1対1であることを意味します。この例では

例1

id | f1 | f2 
1 | a | x 
2 | b | y  
3 | a | x  
4 | c | x  

ではf1の値が等しいため、クエリは私にTRUE(または類似した何かを)答える必要があります。1 F2の値が等しいことに対応しています。 f1の値に等しいでF2の異なる値を対応しているので、この例2で

例2

id | f1 | f2 
1 | a | x 
2 | b | y  
3 | a | z  
4 | c | x  

は、クエリは、私がFALSE(または類似したもの)に答える必要があります。

例3

id | f1 | f2 
1 | a | x 
2 | b | y  
3 | a | x  
4 | c | z 

この例では3クエリは、方向[1-> F2と〔2-> F1の両方にTRUE私に答える必要があります。

皆さん、助けをいただきありがとうございます。私は十分にはっきりしていることを願っております。もちろん、私は悪い英語をお詫びします。

+0

にそれを変更することができます。最初の例ではf1の等しい値がf2の等しい値に相当するため、f1とf2の値が同じである異なる行について話している場合を除き、f1とf2の間には全く等しい値はありません。それでも、すべてのデータまたはその特定の行についてtrueを返すかどうかは不明です。どうか明らかにしてください。 –

+0

あなたのコメントをありがとう、私の悪い説明を残していただきありがとうございます。 私は良くしようとしています: リクエスト:答えフィールドの同じ値のテーブル内のすべてのレコードに対して、f1がフィールドf2の同じ値に対応する場合にのみTRUE(または同等のもの)。 例2は、f1の値が同じでf2の値が異なる2つのレコードが存在するため、Falseです。 – Marco

+0

このような状況が発生した場合はどうすればいいでしょう: 'a | x; z | y; c | a; a | c' aとxまたはaとcの間に等価性があるかどうかを知る方法?これが重要でない場合は、各行を他のすべての行と照合し、1つの行を他の行に検証するためにクロス結合を実行する必要があります。 –

答えて

0

あなたはresuling行はここにこれを試して

select f1 from 
(select distinct f1, f2 
    from my_table) t1 
group by f1 
having count(*) >1 
union 
select f2 from 
(select distinct f1, f2 
    from my_table) t2 
group by f2 
having count(*) >1  
0

と一致しないことこれらはSELECT DISTINCTに労働組合を使用することができます。私はすべての行を数え、f1がf2と等しい行からのSUMと比較します。それは文字列としてTRUEまたはFALSEを返しますが、あなたはそれは、少なくともではない私には、明確ではないが、すべての0,1

SELECT 
    IF(count(id) = SUM(IF(f1=f2,1,0)), 'TRUE', 'FALSE') as result 
FROM yourTable; 
+0

これは間違っているようです.f1 = f2の問題ではなく、f2の値がすべてf1ごとに異なるかどうかです。 –

0
SELECT IF(MAX(ct) = 1, 'TRUE', 'FALSE') 
    FROM (
     SELECT f1, 
       COUNT(DISTINCT f2) AS ct -- hoping for only 1 
      FROM my_table 
      GROUP BY f1 
     ) AS c; 
関連する問題