存储过程错误:子查询返回多于1行

时间:2010-12-03 07:13:31

标签: php mysql stored-procedures mysql-error-1242

我正在尝试创建一个存储过程但是给我一个错误:Subquery为下面的查询返回多行。这可以使用游标完成,但是有没有其他方法可以直接在存储过程中运行此查询而不使用游标,因为我需要在多个表的存储过程中添加多个此类型的查询。

查询: -

UPDATE ipcc_patent_ipc_class
SET assignee_type = (
SELECT IF(ipcc_patent_master.assignee_type='$ipcc_config_param[0]',$ipcc_config_value[0],IF(ipcc_patent_master.assignee_type='$ipcc_config_param[1]',$ipcc_config_value[1],null))
FROM ipcc_patent_master
WHERE ipcc_patent_ipc_class.patent_id = patent_uid);

但是这个查询适用于多个字段: -

UPDATE ipcc_patent_ipc_class
SET geographies_id=(
  SELECT ipcc_geographies.geographies_uid
  FROM ipcc_patent_master,ipcc_geographies
  WHERE ipcc_patent_master.geographies = ipcc_geographies.geographies
  AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid
),
jurisdictions_id =(
  SELECT ipcc_jurisdictions.jurisdisctions_uid
  FROM ipcc_patent_master,ipcc_jurisdictions
  WHERE ipcc_patent_master.jurisdictions = ipcc_jurisdictions.jurisdictions
  AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid
),
country_code_id =(
  SELECT ipcc_country_code.country_code_uid
  FROM ipcc_patent_master,ipcc_country_code
  WHERE ipcc_patent_master.country_code= ipcc_country_code.country_code
  AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid
); 

4 个答案:

答案 0 :(得分:2)

在子查询中添加限制子句。

答案 1 :(得分:1)

在子查询的WHERE子句中添加更多术语,将其缩小到一条记录,或者为其添加LIMIT子句。

答案 2 :(得分:0)

我认为你根本不需要子查询。您可以直接在UPDATE查询中引用多个表:

http://dev.mysql.com/doc/refman/5.0/en/update.html

答案 3 :(得分:0)

问题解决了...... 对于子查询(SELECT Statement),patent_uid缺少别名导致此错误。 输入表名作为别名后,它在存储过程中开始正常工作..

感谢各位帮助...