ошибка хранимой процедуры: подзапрос возвращает более 1 строки - PullRequest
1 голос
/ 03 декабря 2010

Я пытаюсь создать хранимую процедуру, но выдает ошибку: подзапрос возвращает более 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
); 

Ответы [ 4 ]

2 голосов
/ 03 декабря 2010

Добавьте условие Limit в ваш подзапрос.

1 голос
/ 03 декабря 2010

Добавьте больше условий к предложению WHERE вашего подзапроса, чтобы свести его к одной записи, или добавьте предложение LIMIT к той же.

0 голосов
/ 03 декабря 2010

Проблема решена ... для подзапроса (оператор SELECT) отсутствовал псевдоним дляatent_uid, что привело к этой ошибке После ввода имени таблицы в качестве псевдонима она начала нормально работать внутри хранимой процедуры.

Спасибо, ребята, за вашу помощь ...

0 голосов
/ 03 декабря 2010

Я не думаю, что вам вообще нужен подзапрос.Вы можете ссылаться на несколько таблиц непосредственно в запросе ОБНОВЛЕНИЕ:

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

...