2017-03-24 11 views
0

私は疎テーブルは以下のように構成されている:一緒に糊付けリレーショナルデータ行

id | name  | phone   | account 

もNULL値があります

主キーまたはインデックスはありません。私が欲しいのは例えば、一緒に異なる行からの「のり」のデータです:

id | name  | phone   | account 
    1  null  '339-33-27'  4  
    null 'John' '339-33-27'  4      

を考えると、私は

id | name  | phone   | account | 
    1  'John' '339-33-27'  4  

で終わるしたいしかし、私が見逃している値がわかりませんテーブル。 この種の問題にアプローチする一般的な方法は何ですか?結合のみを使用する必要があるか、再帰関数となるか

更新:提供、より明確な例

id to account is many-to-many 
account to name is many-to-many 
phone to name is one-to-one 

データベースは、私がしたいことは、私はすでに場合は/アカウントに

+0

あなたが見つけることができるすべてのデータベースをそれぞれはしないでください。使用しているタグのみにタグを付けます。 – GurV

+1

2つの行が同じ列の異なる非NULL値を持つ場合はどうなりますか?これはできますか?もしそうなら、あなたが見たいと思っているものを教えてください...そうでなければ、私はこのテーブルが何であるのだろうと思っています;) – Frazz

+0

互換性のないデータベースタグを削除しました。使用しているデータベースのみにタグを付けてください。 –

答えて

0

を見つけることができる持っているすべての行を取得することです 基本的には、生のトランザクションデータであります私はあなたが正しく理解して、これがうまくいくかもしれません。あなたが必要とするのは自己参加です。

select t2.id, t1.name, t1.phone, t1.account 
from table1 t1 
join table1 t2 on t1.account = t2.account and t1.phone = t2.phone 
where t1.name is not null 

しかし、この特定のクエリは、サンプルデータの前提に依存しています。私の前提は、nameがnullでない場合、Idはnullになり、Idは電話番号とアカウントを調べることで見つけることができるということです。この仮定が真でない場合は、問題を解決するためにサンプルデータが必要になることがあります。

データによっては、T1がIDを取得するために左結合またはスワップが必要な場合があります。名前およびwhere条件ではなく、そのIDはnullではありません。このような小さなデータサンプルサイズでは、わかりにくいです。

関連する問題