我有两个模型Part
和DamagedPart
。
他们都有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
答案 0 :(得分:0)
您需要LEFT JOIN
和COALESCE
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");