2016-11-17 7 views
1

私は非常に一貫性のないOracleデータベースを使用しています。INNER JOINを使用して3つのテーブル間でOracleクエリを作成

例によってデータベースを簡単に作成すると、これらの3つのテーブルがあります。

TABLE_F 
------ 
id = 3 
title = "Hello" 


TABLE_M 
------ 
id = 3 
category = "val3" 
flid = 5 


TABLE_X 
------ 
id = 3 
body = "How are you?" 
flid = 30 

id = 3 
body= "Bye bye" 
flid = 35 

私は次のような結果を得るために、クエリを作りたい:

id | title | mat | BODY   | OTHER 
------------------------------------------ 
3 helllo val3 How are you? Bye bye 

私のクエリは次のとおりです。

私が得る
SELECT 
TABLE_F.title, 
TABLE_M.category, 
TABLE_X.body as BODY 
FROM TABLE_F 
INNER JOIN TABLE_M 
ON TABLE_F.id=TABLE_M.id 
INNER JOIN TABLE_X 
ON TABLE_F.id=TABLE_X.id 
WHERE TABLE_M.flid=5 AND TABLE_X.flid=30; 

:私は必要

id | title | mat | BODY   
-------------------------------- 
3 helllo val3 How are you? 

をクエリに追加するにはTABLE_X.body as OTHER( "Bye bye"という文字列が含まれています)が表示されますが、bodyを取得するにはwitd flid=30をフィルタリングしているため、表示できません。

私のデータベースではなく、デザインを変更できません。私は1つのクエリ(私はそれが可能な場合は知っていけない)で希望の出力を取得する必要があります。

ありがとうございます。

+0

を使用して2回table_x参加します – Thomas

答えて

1

はflid = 35で二回TABLE_Xに参加別名

SELECT_F.id, 
    TABLE_F.title, 
    TABLE_M.category mat, 
    TABLE_X.body BODY, 
    Y.body OTHER BODY, 
FROM TABLE_F 
    INNER JOIN TABLE_M ON TABLE_F.id=TABLE_M.id 
    INNER JOIN TABLE_X ON TABLE_F.id=TABLE_X.id AND TABLE_X.flid=30 
    INNER JOIN TABLE_X Y ON TABLE_F.id=Y.id AND Y.flid=35 
関連する問題