IF, THEN, SELECT, SET не работает. mysql - Ошибка # 1064 [дубликат]

Две вещи, чтобы иметь в виду, что пользователь может нажать кнопку «Назад» или нажать кнопку входа в панель действий. Итак, если вы хотите перенаправить его в тот же пункт назначения, вы можете это сделать.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

Это приведет к намерению пользователя нажать любую клавишу или кнопку панели действий.

10
задан TylerH 25 September 2017 в 20:52
поделиться

5 ответов

Если у вас есть несколько операторов в условии if, вы должны использовать блок BEGIN ... END для их инкапсуляции.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
 SET @test1 = 'test1'
 SET @test2 = 'test2' 
END
ELSE
BEGIN
 SET @test1 = 'testelse'
 SET @test2 = 'testelse'
END
21
ответ дан TylerH 17 August 2018 в 10:34
поделиться

Поведение имеет смысл, так как ваше первое испытание будет разбито так:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'

SET @test2 = 'test2' 

ELSE
   SET @test1 = 'testelse'

и ELSE потерпят неудачу, так как он не принадлежит к любому оператору IF.

Подумайте об этом:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
   SET @test1 = 'test1'
   SET @test2 = 'test2' 
END
ELSE
BEGIN 
   SET @test1 = 'testelse'
   SET @test2 = 'testelse'
END
1
ответ дан Alexei 17 August 2018 в 10:34
поделиться

Если у вас есть несколько операторов после IF, вы должны использовать begin и end (например, по сравнению с accolades в c #).

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
   SET @test1 = 'test1'
   SET @test2 = 'test2' 
END
ELSE
BEGIN
   SET @test1 = 'testelse'
   SET @test2 = 'testelse'
END
1
ответ дан HoneyBadger 17 August 2018 в 10:34
поделиться

Используйте BEGIN и END для обозначения блока с несколькими операторами, как и с { и } на других языках, в которых вы можете разместить несколько операторов SET ...

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
    SET @test1 = 'test1'
    SET @test2 = 'test2'
END
ELSE
BEGIN
    SET @test1 = 'testelse'
    SET @test2 = 'testelse'
END

Или используйте SELECT, чтобы назначать значения вашим переменным, позволяя назначать оба в одном утверждении и избегать использования BEGIN и END.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
    SELECT
        @test1 = 'test1',
        @test2 = 'test2' 
ELSE
    SELECT
        @test1 = 'testelse',
        @test2 = 'testelse'
4
ответ дан MatBailie 17 August 2018 в 10:34
поделиться

Второе выражение в вашем вопросе всегда будет вызывать execute @ test2 = 'testelse', потому что ELSE заканчивается сразу после первого выражения после else:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
-- IF is done evaluating here
SET @test2 = 'testelse' 

Если у вас есть несколько выражений в IF , вы всегда можете группировать выражения, используя BEGIN / END.

Но в вашем случае самым простым способом было бы это:

IF (SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10
  SELECT @test1 = 'test1', @test2 = 'test2' 
ELSE
  SELECT @test1 = 'testelse', @test2 = 'testelse'
0
ответ дан t-clausen.dk 17 August 2018 в 10:34
поделиться
Другие вопросы по тегам:

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