2016-12-20 14 views
0

ビューを作成するために2つのテーブルを完全に結合しようとしていますが、正しいmysqlクエリを見つけることができません。いくつかの値をオーバーロードすることによって2つのテーブルを結合する。ビューのMySQLフル結合問題

のは、これら3つのテーブルを見てみましょう:

会社テーブル

ID Name 
--------- 
1 A 
2 B 
3 C 

ツールテーブル

ID Tool  Version 
------------------------ 
1 Hammer  1 
2 Saw   1 
3 Screwdriver 1 
4 Wrench  2 

CompanySpecialToolsテーブル

ID ToolID CompanyID Tool 
------------------------------------------- 
1 2  1   Frame Saw 
2 3  1   Phillips screwdriver 
3 3  1   Slot screwdriver 

基本的に、CompanySpecialToolsテーブルは、特定の会社のツールの一部を「オーバーロード」します。

私が作成しようとしているビューには、次のクエリに対して次のような結果を生成する必要があります:多くの裁判の後

Select * from myview where companyID=1 OR companyID is null 

ToolID CompanyID Tool 
-------------------------- 
1  NULL  Hammer 
2  1   Frame Saw 
3  1   Phillips screwdriver 
3  1   Slot screwdriver 
4  NULL  Wrench 



Select * from myview where companyID=2 or companyID is null 

ToolID CompanyID Tool 
-------------------------- 
1  NULL  Hammer 
2  NULL  Saw 
3  NULL  Screwdriver 
4  NULL  Wrench 
+0

私は、このためのビューを必要とする理由あなたが疑問に思うかもしれません... データベースは、データベースへの直接アクセスを持つことができますが、唯一のクエリONEテーブルJSON APIを使用していないiOSアプリで使用されていますWHERE、GROUP、ORDERなどのフィルタを使用して、一度に1つのビューを表示できます。 – JeremK

+0

それは、コメントではなく、質問に入れてください。 – Barmar

答えて

0

、私が解決策を見つけたようだエラー。

次のクエリは、私の質問に答える:

SELECT t.ID as ToolID, 
s.CompanyID as CompanyID, 
COALESCE(s.Tool, t.Tool) as Tool 
FROM Tools t 
LEFT OUTER JOIN CompanySpecialTools s ON s.ToolID = t.ID 
UNION ALL 
SELECT ID as ToolID, 
null as CompanyID, 
Tool 
FROM Tools 

は、GROUP BYは、望ましい結果を生成し追加。

SELECT * FROM myview where companyID=1 OR companyID is null GROUP BY ToolID