(? = (select travel_region_id from relationships where travel_id = travels.id))
错误
ActiveRecord::StatementInvalid (Mysql::Error: Subquery returns more than 1 row: select count(*) from travel_start_days, cars, travels
where travels.id = travel_start_days.travel_id and travels.id = travel.car_id and travel_start_days.day > adddate(curdate(), interval '2' day) and (7 = (select travel_region_id from relationships where travel_id = travels.id)) and '2013-08-16' <= travel_start_days.day):
更新这是方法创建查询
def conditions
where = ''
param = []
if @region && @region != ''
where += 'travels.region_id = ?'
param += [@region.to_i]
end
if @car && @car != ''
where += ' and ' if where != ''
where += 'cars.id = ?'
param += [@car.to_i]
end
if @relation && @relation != ''
where += ' and ' if where != ''
where += '(? = (select travel_region_id from relationships where travel_id = travels.id))'
param += [@relation.to_i]
end
if @start_port && @start_port != ''
where += ' and ' if where != ''
where += '(? = (select location_id from travel_days where travel_id = travel_start_days.travel_id and day_no = 1 order by arrival asc limit 1))'
param += [@start_port.to_i]
end
return where == '' ? nil : ["travel_start_days.day > adddate(curdate(), interval ? day) and " + where] + [@criteria[5]] + param
end
答案 0 :(得分:1)
这部分条件的问题:
(7 = (select travel_region_id from relationships where travel_id = travels.id))
显然,此子查询返回多个travel_region_id
,只需将=
替换为IN
(7 IN (select travel_region_id from relationships where travel_id = travels.id))
答案 1 :(得分:0)
如果从子查询获得多于一行,则将group by子句添加到子查询中
SELECT travel_region_id FROM relationships
WHERE travel_id = travels.id
GROUP BY travel_region_id