【问题标题】:MySQL: Select query using WHERE IN () with variables on the basis of conditionsMySQL:根据条件使用带有变量的 WHERE IN () 选择查询
【发布时间】:2020-06-30 14:58:01
【问题描述】:

对于我的 MySQL PROCEDURE,我有一个使用 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');

如何使用单个查询来实现这一目标?

注意:这个 select 查询语句在 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);

【问题讨论】:

  • WHERE tt.section IN ('A', 'B', 'C') OR tt.section IN ('A', 'B', 'D') ...? OR Clause
  • @GrumpyCrouton - 谢谢你的帮助。我正在寻找此查询的特定输入,但我无法使用 ORAND 条件。
  • WHERE FIND_IN_SET(tt.section, 'A,B,C')。条件数组具有单个文字 CSV 形式,而不是单独的文字,具有任何值数量。

标签: mysql select procedure where-in


【解决方案1】:
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 不能包含逗号,也不需要用" 引用。 IE。它可能是'A'(将在所有变体中找到)、'D'(仅当&lt;CONDITION 1&gt; 为假且&lt;CONDITION 2&gt; 为真时)或'X'(从不)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2018-07-02
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多