2017-12-05 8 views
-1
-table : events 
[id=>1 , data_id =>1 , events_reference =>5 , g_id=>0 
    id=>5 , data_id=>1 , events_reference =>NULL , g_id=>1, 
    id=>6 . , data_id=>3, events_reference => 5 ,g_id=>0 ] 

- table : data 
[id=> 0 , name=>test1, 
    id=>1 , name=>test2, 
    id=>3 , name=>tes3 ] 

私はg_id_1等しいが、データテーブルに(ないDATA_ID列)をdata.idする場合は、データ名を含む列名g_id_1を取得したい、とも私はそのショーg_id_2列名を取得したいです(すべてのイベントを取得し、:イベントに基づいてデータ名も私のSQLで複雑なクエリ

を参照して、私はevent.id = 6が

期待される結果を表示されませんので、唯一例えばdata.id = 1というデータを持って欲しいです+新しい列は「g_id_1」+「g_id_2」)

{ 
"id"=>1, 
events_reference => 5, 
"g_id_1" = > "test 1" 
"g_id_2" => "test 2" 
}, 
{ 
"id"=>5, 
events_reference => NULL, 
"g_id_1" = > "test 2" 
"g_id_2" => NULL 
} 

どのように私はevents_referenceが別の行への参照であるので、私は、サブ選択してみましたが、私は最初のレベルではなく、第二のレベルを取得するために管理し、それを行うことができ、同じテーブルで

select id,events_reference , (SELECT name from data as d where events.events_reference = d.id) as g_id_1, 
(SELECT name from data as d,events as e where e.events_reference = d.id) as g_id_1 

答えて

0

イムないのmySQLウィズしかし、MSSQLはかなり良いですし、LEFT結合をしたいと思っているようです。 これは、データが存在する場合に別のテーブルを返すことです。

SELECT events.id, events.events_reference, data.g_id_1, data.g_id_2 
FROM events 
LEFT JOIN data ON events.events_reference = eventtable.events_reference 
LEFT JOIN data data2 ON eventtable.g_id_2 = eventtable2.g_id_1; 

ご質問の内容が間違っていないかご確認ください。

Caz

+0

あなたのクエリで 'data'テーブルで彼の質問ではなく、3 – Barmar

+0

で唯一の2つのテーブルがありますか? – Barmar

+0

彼はg_id_2からg_id_1への参照を行うために同じテーブルに2回参加する必要があります。 3つのテーブルはありませんが、3つの結合があります。 – Caz1224

0

テーブルを結合します。ネストされた参照を取得するには、同じテーブルの複数の結合を使用する必要があります。そして一致するものがない場合は、LEFT JOINを使用して処理する必要があります。

SELECT e1.id, e1.events_reference, d1.name AS g_id_1, d2.name AS g_id_2 
FROM events AS e1 
LEFT JOIN data AS d1 ON e1.g_id = d1.id 
LEFT JOIN events AS e2 ON e1.events_reference = e2.id 
LEFT JOIN data AS d2 ON e2.g_id = d2.id 

DEMO

+0

こんにちは、ありがとうございます。しかし、イベントテーブルに日付がある場合は、日付の降順または降順で順序を追加しました。 – Guz

+0

これは 'ORDER BY e1.date'である必要があります。それ以外の場合、 'date'カラムはあいまいです。ありがとう。 – Barmar

+0

ありがとう。 、別の質問。 data.id = events.idの行のみが表示されることをSQLで確認するにはどうすればよいですか?ですから、data.id = 8にdata.idテーブルを追加すると、それがないようなevents.tableのdata.idはありません。 – Guz