1

我正在尝试创建一个存储过程,但给了我一个错误: Subquery returns more than 1 row for the below query 。这可以使用游标来完成,但是是否有任何其他方法可以在不使用游标的情况下直接在存储过程中运行此查询,因为我需要在存储过程中为多个表添加多个这种类型的查询。

询问:-

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

4 回答 4

2

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

于 2010-12-03T07:19:04.203 回答
1

向子查询的子句添加更多术语以WHERE将其归结为一条记录,或者向LIMIT同一条记录添加子句。

于 2010-12-03T07:16:59.787 回答
0

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

谢谢各位好心人的帮助...

于 2010-12-03T13:38:08.427 回答
0

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

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

于 2010-12-03T07:20:52.190 回答