我有一次旅行,有许多居住地。我需要一个单一的查询,返回没有指定居住地信息的所有行程。和所有符合特定居住条件的旅行。对连接表中没有键的所有记录以及具有匹配键的所有记录的单个查询
我可以从该查询第一:
SELECT * FROM `trips` WHERE (((NOT EXISTS (SELECT id FROM residencies WHERE trips.id = residencies.trip_id))
但要获得第二,我需要添加此位和:
INNER JOIN `residencies` ON (`trips`.`id` = `residencies`.`trip_id`)
添加之前加入WHERE子句要求具有居住ID和没有居住ID的结果。这显然没有任何回报。那么我怎么写这个来获得一个查询中的完整结果集呢?存储过程是不允许的。
我正在使用Rails,因此如果答案是Rails特有的,那么这是奖金(但绝对不是必需的)。如果有人能够证明searchlogic插件如何做到这一点,那么这是一项巨大的好处。
目前,我有一个名为范围的第一个要求:
Trip.named_scope :residencies_empty, :conditions => ['NOT EXISTS (SELECT id FROM residencies WHERE trips.id = residencies.trip_id)']
第二个要求是可以通过searchlogic:
Trip.residences_id_equals(id)
理想的解决方案将是一个searchlogic范围,看起来像这样:
Trip.residencies_null_or_residencies_id_equals(id)
您可以发布旅行和居住表的定义吗? – 2009-10-02 17:24:26