2016-06-22 4 views
1

私は希望の出力を得るために一緒にリンクする必要がある複数のテーブルを含むデータセットを持っています。内部結合してグループの最後の行を取得するために結合する

表1 - house_house

house_id | Name | address | zipcode 

表2 - house_price

ID | house_id | price | status_id 

表3 - 表2にhouse_status

ID | name 

、huis_idあたり複数のエントリのいずれかを含む、あります価格および/またはステータスの変更。私が現在構築しようとしているクエリでは、最小/最大のprijと最新の既知のステータスを取得したい。

私は常にテーブル1を使用して、すべてのロケーションの完全な概要を把握し、このテーブルへの左ジョインを介して他のテーブルを結合しようとします。

ステータスについては、内部結合で構成したサブクエリが必要です。私が挑戦しているのは、私が価格表でインナージョイントを実行したときにうまく機能するが、価格と左ジョイントした後でそれをハウステーブルに組み合わせると、私はそれを機能させるのに苦労している。現在は不可能なテーブルを一緒にリンクしようとしています。

私が自分の考えを持ってレンガの壁に当たったので、どのようにこの仕事をするのが歓迎です。

問合せ:

SELECT 
    h.address, h.zipcode, p.huis_id, p.status 
FROM 
    house_house h 
INNER JOIN 
    (SELECT 
     house_id, status, max(id) as id 
    FROM 
     house_price 
    GROUP BY 
     house_id) p1 
ON 
    p.house_id = p1.house_id AND 
    p.id = p1.id 
LEFT JOIN 
     house_price p ON p.house_id = h.house_id 
GROUP BY 
    p.house_id 

答えて

1

このお試しください:

SELECT hh.house_id 
    , hh.name 
    , hh.address 
    , hh.zipcode 
    , hp.ID 
    , hp.price 
    , hp.status_id 
    , hs.name 
    FROM house_house hh 
    LEFT 
    JOIN house_price hp 
    ON hh.house_id = hp.house_id 
    LEFT 
    JOIN house_status hs 
    ON hp.ID=hs.ID 
+1

家の名前を他の種類の名前と区別できるようにするためのいくつかの仕組みを含めることができます。 – Strawberry

+0

クエリは完全に実行されますが、重複する行が返されます。 @Strawberryは、行を区別するためのメカニズムでクエリを更新するのに良い点があります。 – Ralf

+0

@Ralf私のポイントは、行ではなく列に関連しています。 – Strawberry

0
select * 
from 
(
SELECT h.*, p.* 
    , row_number() over (h.house_id order by p.price desc) as hp 
    , row_number() over (h.house_id order by p.price asc) as lp 
    , row_number() over (h.house_id order by p.is desc) as s 
FROM house_house h 
JOIN house_price p 
on p.house_id = h.house_id 
) tt 
where tt.hp = 1 or tt. lp = 1 or tt.s = 1 
+0

可能性は良いオプションを、私は、MySQLがこれを簡単に変数を用いて達成されるROW_NUMBER()関数 – Ralf

+0

をサポートしていないと信じて – Drew

関連する問題