2017-11-09 2 views
0

私は、人とそのプロパティとの関係をリストするテーブルとプロパティのリスト(ファーストネーム、ラストネームなど)のテーブルを2つ持っています。MySQLユニオン/完全外部結合が期待した結果を返さない

人物表の各人物が、プロパティー表にリストされているすべてのプロパティーを持っていない可能性があります。私が望むのは、リンクされているかどうかにかかわらず、各物件ごとに行が返されることです。例えばので

Properties    Person 
prop_id|prop_name  person_id|prop_id|prop_value 
-----------------  ----------------------------------- 
1  |firstname  10  | 1   | john 
2  |lastname   11  | 1   | sean 
         11  | 2   | connery 

私が望む結果がjohn/10は、姓の列を持っていますが、nullで、この

10 | firstname | john 
10 | lastname | null 
11 | firstname | sean 
11 | lastname | connery 

注意です。

私はこのクエリは私に結果を与えるだろうと思ったが、私が望んでいるジョンのヌル行を私に与えない。

select person_id, prop_value, prop_name 
from person 
left outer join properties on person.prop_id = properties.prop_id 
union 
select person_id, prop_value, prop_name 
from person 
right outer join properties on person.prop_id = properties.prop_id 

このクエリでは、lastname null行が10個省略されます。このクエリは可能ですか?これはMySQL/MariaDBです。

答えて

2

personテーブルをpropertiesテーブルに2回参加させて、これを動作させたいと思っています。

SELECT DISTINCT p1.person_id, p2.prop_value, prop.prop_name 
FROM person p1 
    CROSS JOIN properties prop 
    LEFT JOIN person p2 ON p1.person_id = p2.person_id AND prop.prop_id = p2.prop_id 

これはRomainBarのsqlfiddle.com/#!9/3dadb90/7

+2

@での作業が実証されたクエリを@cf_enする 'DISTINCT'を追加する場合、それは動作します:http://sqlfiddle.com/#!9/多分このような何か3dadb90/7 2つの結合を使用しない場合、同じテーブルのperson_id not nullとprop_value nullを持つことはできません –

+0

distinctとsqlfiddleに関する注釈をありがとう。答えにDISTINCTを追加しました。 –

+0

fantastic。クロス・ジョインは私には新しいものでした。ありがとう – Gurnard

関連する問題