合并两个表中的记录

时间:2016-10-10 07:15:28

标签: sql ruby-on-rails ruby-on-rails-4 activerecord

我有两个模型PartDamagedPart。 他们都有iid字段。

我希望将ActiveRecord对象与这两个表中的数据结合起来。

说,parts表有10条记录:

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表只有两个记录(例如):

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
...

我可以通过一个 AR查询完成此操作吗?

Rails:4.2.7.1
RDBMS:MariaDB 10.0.27

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

Select FROM parts WHERE iid LIKE'[1-]%';
UNION Select FROM damaged_parts  WHERE iid LIKE'[1-]%';

答案 2 :(得分: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");