Подзапрос возвращает более 1 строки ошибки, хотя я использую & ldquo; IN & rdquo; ключевое слово

Я бы рекомендовал шаблон, как показано ниже. Ключевое значение возвращает null, чтобы указать «пожалуйста, не перенаправляйте».

public ActionResult SomeAction()
{
    var predefinedRedirect = MaybeRedirect();

    if (predefinedRedirect != null)
        return predefinedRedirect;

    // The rest of the code
}

private ActionResult MaybeRedirect()
{
    if (Session["level"] == null)
        return RedirectToAction("Home", "Whatever");

    if ((int)Session["level"] == 1)
        return RedirectToAction("Choose", "Whatever");

    ... // other conditions here

    return null;
}
0
задан trincot 19 January 2019 в 11:16
поделиться

1 ответ

Внутренние select запросы возвращают несколько строк. Это не разрешено в выражении if. Это было бы разрешено в чистом выражении in, но как только вы используете if, это больше не имеет места.

Так что переведите свою идею в серию OR:

SELECT * 
FROM   message 
WHERE  seen = '0'
  AND  receiver_delete ='0'
  AND  till_date IS NULL
  AND  (   (to_ = 'user'  AND id_receiver = '36')
       OR  (to_ = 'group' AND id_receiver IN ( 
            SELECT id 
            FROM   ( 
                     SELECT   * 
                     FROM     user_position 
                     ORDER BY id) user_position, 
                     (SELECT @pv := '100') initialisation 
            WHERE  FIND_IN_SET(parent_id, @pv) > 0 
               AND @pv := concat(@pv , ',' , id) 
           ))
       OR  (to_ NOT IN ('user', 'group') AND id_receiver IN (
            SELECT message_group.id 
            FROM   message_group 
            LEFT JOIN message_group_member 
                   ON message_group_member.id_group=message_group.id
            WHERE     message_group_member.id_user='36' 
           ))
       ) 

Я отмечаю, что вы используете назначения переменных в первом внутреннем запросе. Будьте осторожны с этим, так как нет гарантии относительно порядка исполнения. Я вижу, что подзапрос вдохновлен другим моим ответом , но, пожалуйста, обратите внимание на все отказы от ответственности и предупреждения в этом ответе. Они применяются здесь.

Если можете, перейдите на MySql 8 и рекурсивный синтаксис with.

0
ответ дан trincot 19 January 2019 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: