УСТАНОВИТЬ две переменные в операторе SELECT - MySQL - PullRequest
0 голосов
/ 14 ноября 2018

Я использую приведенный ниже код, который выполняется в MySQL, но выдает ошибку при обращении к Java-программе, поскольку Java-программа не может читать точки с запятой ... для Java это 3 утверждения.Мне нужно выполнить этот запрос (установить обе переменные и затем выбрать в одном запросе):

set @row_number:=0;set @PROMOTION_ID_NO:='';
SELECT 
     @row_number:=CASE 
        WHEN @PROMOTION_ID_NO=PD.PROMOTION_ID THEN @row_number + 1
        ELSE 1
    END AS SEQ,
     @PROMOTION_ID_NO:=PD.PROMOTION_ID AS PROMOTION_ID,
    PD.CONDITION_CODE,
    PM.PROMOTION_code,
    PD.CONDITION_TYPE
FROM
    POS_PROMOTION_DISCOUNT PD , POS_PROMOTION_MASTER PM WHERE 
    PD.PROMOTION_ID = PM.PROMOTION_ID
AND PD.STORE_NO = 'G121';

1 Ответ

0 голосов
/ 14 ноября 2018
  • Вы можете переместить оператор SET в отдельную Производную таблицу и сделать CROSS JOIN этой таблицы с другой таблицей (ями).
  • Пожалуйста, не используйте Старые неявные объединения, основанные на запятых, и используйте Современный Явный Join синтаксис на основе .Вместо этого я использовал JOIN .. ON.

Попробуйте следующее:

SELECT 
     @row_number:=CASE 
                    WHEN @PROMOTION_ID_NO=PD.PROMOTION_ID THEN @row_number + 1
                    ELSE 1
                  END AS SEQ,
     @PROMOTION_ID_NO:=PD.PROMOTION_ID AS PROMOTION_ID,
    PD.CONDITION_CODE,
    PM.PROMOTION_code,
    PD.CONDITION_TYPE
FROM
    POS_PROMOTION_DISCOUNT PD 
JOIN POS_PROMOTION_MASTER PM ON PD.PROMOTION_ID = PM.PROMOTION_ID
CROSS JOIN (SELECT row_number:=0, @PROMOTION_ID_NO:='') AS user_init 
WHERE 
  PD.STORE_NO = 'G121';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...