2016-05-09 10 views
0

私はこの前にこの質問をしました:Between two tables how does one SELECT the table where the id of a specific value exists mysqlしかし、私はそれを十分にフレーズしなかったと感じます。2つのテーブルの間に特定の値のIDが存在するテーブルをSELECTする方法mysql(duplicate)

"ハイキング"データベースに2つのテーブルがあり、テーブル1は「フォレスト」と呼ばれ、テーブル2は「マウンテン」と呼ばれます。どちらのテーブルにもFOREIGN KEY "Trip_id"があり、テーブル "Trip"(または何か、これは構成されている例)のPRIMARY KEYで、AUTO_INCREMENTです。トリップはマウンテンまたはフォレストのいずれかになる可能性があるため、2つのテーブルはTrip_idsを共有しません。また、それぞれには、他のテーブルと共有しない属性もあります。山は属性「温度」を持ち、森は属性「大気」を持っています。私が何をしたいのか、どちらかを抽出するかによって「温度」や「雰囲気」、山や森林がTrip_id値に74

SELECT Temperature FROM Mountain WHERE Trip_id = 74 OR 
SELECT Atmosphere FROM Forest WHERE Trip_id = 74; 

が含まれています(私は上記のコードは動作しません知っている)です。

私は、Javaを使用してこの問題を解決するに終わるんでした:

String sqlStatement = "SELECT Trip_id FROM Mountains WHERE Trip_id = 74"; 

if (/*(execute sql statement) == null*/){ 
    //Use Forest (and Atmosphere) 
} 

else{ 
    //Use Mountain (and Temperature) 
} 

は、しかし、MySQLでのステートメント場合は何があるので、すべてでは、この使用してMySQLを解決することが可能であった場合、私は思っていました。

私が考えていたのはSELECT * FROM FOREST OR MOUNTAIN WHERE Trip_id = 74 EXISTS;です(私はこのコードはごみであり、完全に間違っていると知っていますが、私が目指していることを説明するのを助けることを願っています)。

P.S列が同じであれば、これが最良の答えのようになります。その答えを提供するためのGordon Linoff

select m.* 
from mountains m 
where m.trip_id = 74 
union all 
select f.* 
from forests f 
where f.trip_id = 74; 

感謝。

答えて

3

mysqlにはif文があります。とにかく!

あなたはこれを行うことができます。私の意見では

SELECT Temperature as Value FROM Mountain WHERE Trip_id = 74 
Union All 
SELECT Atmosphere as Value FROM Forest WHERE Trip_id = 74 
+0

https://www.youtube.com/watch?v=3YmMNpbFjp0 おかげでたくさんのような – Cornelius

0

以下のクエリを使用できます。

Select 
T.TripID, 
M.Temperature, 
F.Atmosphere 
From 
Trip T 
LEFT OUTER JOIN Mountain M 
ON T.TripID = M.TripID 
LEFT OUTER JOIN Forest F 
ON T.TripID = F.TripID 
Where T.TripID = 74 

上記のクエリでは、MountainテーブルとForestテーブルの両方にこのIDがある場合、TempとAtmosphereが表示されます。 マウンテンまたはフォレストのいずれかのテーブルにこのIDがある場合、TempまたはAtmosphereが表示されます。

0

をこれを解決する方法は2つあります。
1:ユーザーに森林旅行や山岳旅行のいずれかを指示することができます。 1回のクリックで費用がかかり、クエリでは余分なarugmentを、森の場合は「F」、山の場合は「M」を送信します。

CASE @lv_option 
    WHEN 'F' THEN 
     SELECT Atmosphere FROM [FOREST] 
    ELSE 
     SELECT Temperature FROM [MOUNTAIN] 
    END as weather 

2のように:あなたは、画面の表示を変更したくない場合はtrip_idを受ける毎にコマンドを-存在する場合は、あなたが使用することができます。 D:

IF EXISTS (SELECT id FROM [FOREST] WHERE [email protected]_trip_id) 
    BEGIN 
     SELECT Atmosphere as weather FROM [FOREST] WHERE [email protected]_trip_id 
    END 
    ELSE 
    BEGIN 
     SELECT Temperature as weather FROM [MOUNTAIN] WHERE [email protected]_trip_id 
    END 
    END 
関連する問題