子查询返回超过1行的sql查询

时间:2013-08-16 07:36:50

标签: mysql sql

我有这样的错误可以解释我做错了什么?
我只添加了这个sql查询:

 (? = (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

2 个答案:

答案 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