Ошибка: подзапрос возвращает более одного значения. Как это исправить? - PullRequest
0 голосов
/ 25 марта 2020

Это часть моей хранимой процедуры. У меня вышеупомянутая ошибка в этом запросе

 from Log PA
  left join workflow WF on PA.newWFid =
 (CASE 
 WHEN PA.UserCode is not null THEN (SELECT ExistingwfID from RMShuffleLog RM 
 LEFT JOIN PackageApprovalLog PA on PA.ShuffleId = RM.ShuffleId )
 end)

Это работало нормально, но я добавил выражение case в условии соединения выше. Это то, что я добавил выше:

     left join workflow WF on PA.newWFid =
 (CASE 
 WHEN PA.UserCode is not null THEN (SELECT ExistingwfID from RMShuffleLog RM 
 LEFT JOIN PackageApprovalLog PA on PA.ShuffleId = RM.ShuffleId )
 end)

После этого он показывает мне ошибку.

      Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, 
     <= , >, >= or when the subquery is used as an expression

. Мой лог c должен проверить, является ли первая строка пользовательского кода нулевым, затем выбрать существующий wfid из RMshufflelog. Может кто-нибудь сказать мне, в чем проблема?

1 Ответ

1 голос
/ 25 марта 2020

Этот запрос используется как скалярный подзапрос , означающий, что вы получите указанную ошибку, если она возвращает более одной строки:

(SELECT ExistingwfID
 FROM RMShuffleLog RM LEFT JOIN
      PackageApprovalLog PA 
      ON PA.ShuffleId = RM.ShuffleId

)

Это произойдет, если RMShuffleLog имеет более одной строки или PackageApprovalLog имеет более одной совпадающей строки.

У вас есть PA во внешнем запросе. Поэтому я предполагаю, что вы хотите соотнесенное предложение:

(SELECT ExistingwfID
 FROM RMShuffleLog RM
 WHERE PA.ShuffleId = RM.ShuffleId
)

Это (информированное) предположение. С вашим запросом могут быть и другие проблемы.

...