假设三张表:
Table A
has_many :table_b
Table B
belongs_to :table_a
belongs_to :table_c
Table C
has_many :table_b
表 B 和表 C 各有一个布尔属性,其中有一个名为“active”的布尔属性
如何编写 SQL 语句或活动记录表达式来获取表 A 中没有的所有记录
基本上,我在彼此深处做了两个 LEFT OUTER JOIN,最终按照我的预期工作:
SELECT "table_a".* FROM "table_a"
LEFT OUTER JOIN "table b"
ON "table_b"."table_a_id" = "table_a"."id"
AND "table_b"."active" = true
LEFT OUTER JOIN "table_c"
ON "table_b"."table_c_id" = "table_c"."id"
AND "table_c"."active" = true
WHERE "table_b"."id" IS NULL OR "table_c"."id" IS NULL