При выполнении следующей процедуры:Почему я получаю результат, состоящий из более чем одной ошибки строки, когда, наконец, возвращается одна строка?
DELIMITER $$
DROP PROCEDURE IF EXISTS `portaldb`.`is_optional_type_assigned`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `is_optional_type_assigned`(userId int, optionalPlanId int)
begin
if userId is not null and optionalPlanId is not null then
// Will return multiple rows
select conv.FeatureName from planallocation as pa
left join subscriptioninfo as si
on si.SubscriptionId = pa.SubscriptionId
left join plans as pl
on pl.PlanId = pa.CurrentPlanId
right join conversiontable as conv
on conv.ConversionId = pl.OptionalFeatureId
where si.UserId = userId and
conv.FeatureType = 'optional' into @featureList;
// Will return single row
select conv.FeatureName from conversiontable as conv
right join plans as pl
on conv.ConversionId = pl.OptionalFeatureId
where conv.FeatureType = 'optional' and
pl.PlanId = optionalPlanId into @featureName;
if @featureName in (@featureList) then
select true as isAssigned;
else
select false as isAssigned;
end if;
end if;
end$$
DELIMITER ;
Я получаю:
Error Code : 1172
Result consisted of more than one row
ошибку. Что может быть причиной этого? Результат от первого двух операторов select присваивается переменной, а затем сравнивается, если один набор содержит другой.
Будет 'если @ featureName in (@featureList) 'работает? На данный момент он не работает. –
Если реорганизация, которую я предложил, работает - второй запрос приводит к результату true/false, поэтому «if @featureName in (@featureList)» не требуется. – PaulF