Krunal:
Pour mon MySQL PROCEDURE
, j'ai une instruction de requête sélection avec WHERE IN (...)
clause, dont j'ai besoin des entrées conditionnelles / variables.
exemple:
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');
Comment puis-je parvenir à l'aide d'une seule requête?
Note: Cette instruction select de requête est à l' intérieur mySQL PROCEDURE
.
Je cherche quelque chose comme ceci:
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);
Akina:
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
ne doivent pas contenir des virgules et pas besoin d'être cité avec "
. -À- dire qu'il est peut - être 'A'
(on trouvera dans toutes les variantes), 'D'
(seulement quand <CONDITION 1>
est faux et <CONDITION 2>
est vrai) ou 'X'
(jamais).