gpt4 book ai didi

mysql - 没有变量的命名数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:09 25 4
gpt4 key购买 nike

我有一个查询,看起来像这样:

select *
from foo
where bar in ("bla", "blub")
and anotherField in ("bla", "blub")

是否可以命名 ("bla", "blub") 数组,是否可以在开头不使用 set 来命名它?

最佳答案

MySQL 变量只能保存其原始数据类型。 MySQL 中没有数组这样的东西,也没有在变量中存储多个值的能力。

因此,对您的问题的简短回答是“不,这是不可能的”。但这通常不是什么大问题,因为您的应用程序通常使用更高级的语言构造 SQL,您可以在其中将这样的集合保存在一个变量中:因此可以构建相同的 IN()从该变量表达而不必在任何显着程度上重复自己。这本质上就是@NikhilButani's answer通过语句准备完成。

也就是说,值的集合可以用SQL 表示:毕竟,这正是 的含义。因此,您可以通过将您的值存储在表中来解决这个问题。基本上可以通过三种方式来实现,没有一种比简单地将相同的文字列表表达为两个 IN() 表达式更“容易”(恕我直言),因此我通常不会推荐它们对于您的用例:

  1. 创建并填充一个(可能是临时的)表,您随后将其加入查询:

    CREATE TEMPORARY TABLE vals (x VARCHAR(255) NOT NULL PRIMARY KEY);
    INSERT INTO vals VALUES ('bla'), ('blub');

    SELECT *
    FROM foo
    JOIN vals v1 ON v1.x = foo.bar
    JOIN vals v2 ON v2.x = foo.anotherField;
  2. 使用 UNION 从子查询中派生“内联”表:

    SELECT *
    FROM foo
    JOIN (SELECT 'bla' AS x UNION ALL SELECT 'blub') v1 ON v1.x = foo.bar
    JOIN (SELECT 'bla' AS x UNION ALL SELECT 'blub') v2 ON v2.x = foo.anotherField;
  3. 从相同的 UNION 定义一个 View ,然后加入它:

    CREATE VIEW vals AS SELECT 'bla' AS x UNION ALL SELECT 'blub';

    SELECT *
    FROM foo
    JOIN vals v1 ON v1.x = foo.bar
    JOIN vals v2 ON v2.x = foo.anotherField;

也可以使用 MySQL 的 FIND_IN_SET() 函数解决您的问题,如 @Stephan's answer 中所示。 .然而,这在很大程度上是一种“黑客攻击”,它依赖于具有特定形式的数据并且无法很好地扩展。

关于mysql - 没有变量的命名数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com