【问题标题】:Is MySQL able to return mutiple result set with one query?MySQL 是否能够通过一个查询返回多个结果集?
【发布时间】:2010-12-06 20:08:14
【问题描述】:

我从 proc 成功执行了以下(返回两个单独的结果集),但在将其作为基本查询执行时不能这样做。

SELECT * FROM persons;
SELECT * FROM addresses;

可能吗?语法是什么?

编辑:

我正在使用 Ruby 的 DBI 库:

dbh.query("SELECT * FROM persons; SELECT * FROM addresses;")

【问题讨论】:

    标签: sql mysql ruby dbi


    【解决方案1】:

    如果数据相关,则使用 JOIN 将地址项连接到人员项。如果您的表都包含相似的列,您可能需要这样的 UNION SELECT:

    从人中选择 * 联盟 从地址中选择 *;

    【讨论】:

    • 联合用于具有相似列的表。
    • 你说的太对了,但你不会相信有多少人问我如何同时执行两个 SQL 查询,而他们实际上想要进行联合选择。所以这或多或少对那些人来说是一个指针。随意撤消否决... ;-)
    【解决方案2】:

    您是从 mysql cli 中谈论的吗?对我来说很好:

    mysql> select count(*) from a; select count(*) from a;
    +----------+
    | count(*) |
    +----------+
    |     2050 |
    +----------+
    1 row in set (0.06 sec)
    
    +----------+
    | count(*) |
    +----------+
    |     2050 |
    +----------+
    1 row in set (0.00 sec)
    

    如果你在谈论一种特定的语言,那么它取决于你的 mysql 库。例如,PHP mysql 库不支持此功能。但是,如果您使用 multi_query(),mysqli 库会执行此操作。

    【讨论】:

    • 我在考虑 Ruby DBI 库,但我注意到我也无法在“MySQL 管理员”中运行上述内容。
    • 我所读到的关于 ruby​​ DBI 的所有内容都指向不。 mysql管理员不允许你执行两个查询并得到两个结果集,但它确实支持多个结果集,例如当一个存储过程有多个结果集时。
    【解决方案3】:

    加入人员和地址,您可以获得一个大的结果表,假设地址与具有某些标识符的人员相关联。如果这两个查询不相关,为什么要将它们放在一起?

    【讨论】:

    • 假设示例。在某些情况下,根据记录的处理方式,独立返回每个记录集是有意义的。
    • 通过一次调用从数据库中获取尽可能多的数据效率更高。
    • 实际上,如果您执行 Model.includes(:another_model).find(...) 请求,当前的 Rails 发行版会决定不使用连接,支持两个不同的选择查询。我很确定这是故意的(可能会减少内存开销,因此最终会更快)。
    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多