MySQL: выберите запрос, используя WHERE IN () с переменными на основе условий - PullRequest
0 голосов
/ 19 марта 2020

Для моего MySQL PROCEDURE у меня есть оператор запроса select с использованием условия WHERE IN (...), для которого мне нужны некоторые условные входные данные / переменные.

пример:

SELECT * FROM test_table tt WHERE tt.section IN ('A', 'B', 'C');

SELECT * FROM test_table tt WHERE tt.section IN ('A', 'B', 'D');

SELECT * FROM test_table tt WHERE tt.section IN ('A','C');

SELECT * FROM test_table tt WHERE tt.section IN ('A', 'B', 'C', 'D');

Как я могу добиться этого с помощью одного запроса?

Примечание. Этот оператор запроса выбора находится внутри mySQL PROCEDURE.


Я ищу что-то вроде этого:

SET @ABC = '"A", "B", "C"';
SET @ABCD = '"A", "B", "C", "D"';
SET @AC = '"A", "B", "C", "D"';

SET @IN_CLAOUSE_VARIABLES = NULL;

IF (<CONDITION 1>) THEN
    SET @IN_CLAOUSE_VARIABLES = @ABC;
  ELSEIF (<CONDITION 2>) THEN
    SET @IN_CLAOUSE_VARIABLES = @ABCD;
  ELSE
    SET @IN_CLAOUSE_VARIABLES = @AC;
END IF:

SELECT * FROM test_table tt WHERE tt.section IN (@IN_CLAOUSE_VARIABLES);

1 Ответ

1 голос
/ 19 марта 2020
SET @ABC = 'A,B,C';
SET @ABCD = 'A,B,C,D';
SET @AC = 'A,C';

SET @IN_CLAOUSE_VARIABLES = NULL;

IF (<CONDITION 1>) THEN
    SET @IN_CLAOUSE_VARIABLES = @ABC;
  ELSEIF (<CONDITION 2>) THEN
    SET @IN_CLAOUSE_VARIABLES = @ABCD;
  ELSE
    SET @IN_CLAOUSE_VARIABLES = @AC;
END IF:

SELECT * FROM test_table tt WHERE FIND_IN_SET(tt.section, @IN_CLAOUSE_VARIABLES);

tt.section НЕ должно содержать запятых и не должно заключаться в кавычки ". Т.е. это может быть 'A' (будет найдено во всех вариантах), 'D' (только когда <CONDITION 1> ложно и <CONDITION 2> верно) или 'X' (никогда).

...