1242子查询返回超过1行

时间:2014-07-24 19:01:11

标签: mysql sql

我收到了这个错误,希望你能帮助我。我想在搜索中显示某个项目。

SELECT p.id, p.property_rank, p.pic_numb, p.att_numb, p.confirm, p.finalized ,p.deleted, p.user_id, p.add_date, p.visit_time,p.visit_date,p.sent_numb, p.contact_numb, zip_name, zip_id, p.street, p.sp_featured, p.property_title, p.b_price_unit, p.b_price_si, p.b_price, p.b_price, p.street_no, p.field_54, 
    p.field_409, 
    ( SELECT `listing_type`.`id` 
      FROM `res_rpl_listing_types` AS `listing_type` 
      WHERE `listing_type`.`id` = (
          SELECT `listing`.`type` 
          FROM `res_rpl_listings` AS `listing` 
          WHERE `listing`.`id` = p.`listing`)
    ) AS `listing_type_id`, 
    p.listing, p.googlemap_ln, p.googlemap_lt, p.category, p.b_bedrooms, p.b_bathrooms, p.sp_openhouse, p.b_price_period, p.b_lot_area_unit, p.b_lot_area_si, p.b_lot_area, p.b_lot_area, p.b_living_area_unit, p.b_living_area_si, p.b_living_area, p.b_living_area, p.description, p.sp_hot, p.sp_forclosure 
FROM res_rpl_properties AS p 
WHERE 1 AND p.`type` = '0' AND p.`confirm` = '1' AND p.`finalized` = '1' AND p.`deleted` = '0' AND p.`category` IN(9,8,10) 
ORDER BY p.add_date DESC 
LIMIT 0 , 12

2 个答案:

答案 0 :(得分:1)

错误告诉您子查询(选为listing_type_id)返回多行。重新措辞 - 它为listing_type_id返回了多个值。您应该将子查询的结果限制为仅一个。

答案 1 :(得分:0)

您有两种选择:

或者只选择子查询的第一行

(SELECT `listing_type`.`id` 
 FROM `res_rpl_listing_types` AS `listing_type` 
 WHERE `listing_type`.`id` = (
       SELECT `listing`.`type` 
       FROM `res_rpl_listings` AS `listing` 
       WHERE `listing`.`id` = p.`listing`
       LIMIT 1 
       )
 LIMIT 1
 ) AS `listing_type_id`

或使用IN进行多重比较

(SELECT `listing_type`.`id` 
 FROM `res_rpl_listing_types` AS `listing_type` 
 WHERE `listing_type`.`id` IN (
       SELECT `listing`.`type` 
       FROM `res_rpl_listings` AS `listing` 
       WHERE `listing`.`id` = p.`listing`)
    LIMIT 1
 ) AS `listing_type_id`

问题是有2个子查询,你需要同时处理它们。它们都需要限制在1行。

相关问题