2010-12-03 86 views
1

我想创建一个存储过程,但给我一个错误:子查询为以下查询返回多于1行。这可以使用游标来完成,但有没有其他方法可以直接在存储过程中运行此查询而无需使用游标,因为有多种查询需要在存储过程中添加多个表。存储过程错误:子查询返回多于1行

查询: -

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 
); 
+0

你能确切的报价错误,并与您正在试图*确切的SQL *创建SP? – Unreason 2010-12-03 08:26:08

回答

1

添加更多字词与您的子查询的WHERE条款把它归结为一个记录,或添加LIMIT条款相同。

2

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

+0

限制并没有解决问题,因为当通过php脚本或mysql查询浏览器运行相同的查询时,通过更新多行,但添加到存储过程时给出了所需的输出提供了上述错误。 – user529011 2010-12-03 07:54:38

+0

您是否在更新或选择中添加了限制?我怀疑后者。 – symcbean 2010-12-03 10:10:54

0

问题解决了...... 子查询(SELECT语句),别名失踪了patent_uid从而导致这个错误。 输入表名作为别名后,它开始在存储过程中正常工作..

谢谢你们对你的帮助......

相关问题