2017-04-19 11 views
0

私はこのテーブル(MyTable)を持っています。 I行1、3、5が必要上記において値1と値2 の値に一致している行を返すように、それを必要とMySql 2列の同じ値を持つ行を照会します。

id date  value1 value2 
    1 2016-09-16 1  null 
    2 2016-09-16 null null 
    3 2016-09-16 3  null 
    4 2017-01-16 2  null 
    5 2017-01-16 null  1 
    6 2017-01-16 null  34 
    7 2017-01-16 null  3 

、7が返さ。

日付でソート可能な場合は、

+1

値1と値2で一致していますか?あなたの期待される結果には真実ではありません。 –

+0

申し訳ありませんが、 "返されました"という単語の前に入力ミスがありました。行1と5は値1と値2で一致する値を持ちます。行3と行7は、値1と値2で一致する値を持ちます。返されるすべての行が必要です。 – user2568374

答えて

1

このお試しくださいNULLではありません:

select 
    * 
from 
    my_table t 
where 
    t.value1 in 
     (select value2 from my_table) 
or 
    t.value2 in 
     (select value1 from my_table) 
order by 
    t.date, t.value2 
+0

は行3と7を返しますが、1と5..ifは返しません。待って、二重チェック、これは正しいかもしれません。 – user2568374

+0

はい、それは私の例で行ったように私のdbは2つのセットを持っていませんでした。それは非常にトリッキーですが、私は=の代わりに=と一緒に考えていました。https://dba.stackexchange.com/questions/72211/matching-two-rows-in-a-single-table- 2つの特定キーが異なる値を持つ場合 – user2568374

-2

ちょうど 'VALUE1' で「どこだ句を追加VALUE2 nullでなく、 '値2' は

+0

行6を返します。これは、別の行と一致しません。 –

+0

これで結果が得られません。真の行4と6は返されない必要があります。 – user2568374

0

異なるが形式の出力が加わり:

SELECT 
    myt.id as 'ID1', 
    myt2.id as 'ID2', 
    myt.value1 as 'Value1', 
    myt2.value2 as 'Value2' 
FROM 
    MyTable as myt 
     INNER JOIN MyTable as myt2 
WHERE 
    myt.value1 = myt2.value2 

収量:

ID1  ID2  Value1  Value2 
1   5   1   1 
3   7   3   3 
関連する問題