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

サブクエリに Limit 句を追加します。

于 2010-12-03T07:19:04.203 に答える
1

WHEREサブクエリの句に用語を追加して 1 つのレコードにするか、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 に答える