2016-10-10 4 views
0

私はPartDamagedPartの2つのモデルを持っています。 すべてはiidフィールドです。2つのテーブルからのレコードをマージする

これらの2つのテーブルのデータを組み合わせたActiveRecordオブジェクトを取得したいと考えています。

セイ、partsテーブルは10件のレコードを持っています

id: 10, iid: 200, d: 4 
id: 20, iid: 240, d: 7 

最後に私が取得する必要があります:

id: 1, iid: 100, d: 0 
id: 2, iid: 150, d: 0 
id: 10, iid: 200, d: 4 # <--- replaced from 'damaged_parts' table 
id: 20, iid: 240, d: 7 # <--- replaced from 'damaged_parts' table 
id: 5, iid: 433, d: 0 
... 

id: 1, iid: 100, d: 0 
id: 2, iid: 150, d: 0 
id: 3, iid: 200, d: 0 
id: 4, iid: 240, d: 0 
id: 5, iid: 433, d: 0 
... 

そしてdamaged_partsテーブルには2つだけの記録(例えば)を持っています

これを行うことはできますか ARクエリ?

のRails:4.2.7.1
RDBMS:MariaDB 10.0.27

答えて

0

あなたはこれを試すことができLEFT JOINCOALESCE

SELECT p.id, 
     p.iid, 
     COALESCE(dp.d, p.d) AS d 
FROM parts p 
     LEFT JOIN damaged_parts dp 
       ON p.id = dp.id 
       AND p.iid = dp.iid 
0
Select FROM parts WHERE iid LIKE'[1-]%'; 
UNION Select FROM damaged_parts WHERE iid LIKE'[1-]%'; 
+0

「コードのみ」の回答は避ける必要があります。 – croxy

0

を必要としています。

Part.joins("LEFT OUTER JOIN damaged_parts ON parts.iid = damaged_parts.iid").select("coalesce(damaged_parts.id, parts.id) as id, parts.iid, coalesce(damaged_parts.d, parts.d) as d"); 
関連する問題