【发布时间】:2010-12-06 20:08:14
【问题描述】:
我从 proc 成功执行了以下(返回两个单独的结果集),但在将其作为基本查询执行时不能这样做。
SELECT * FROM persons;
SELECT * FROM addresses;
可能吗?语法是什么?
编辑:
我正在使用 Ruby 的 DBI 库:
dbh.query("SELECT * FROM persons; SELECT * FROM addresses;")
【问题讨论】:
我从 proc 成功执行了以下(返回两个单独的结果集),但在将其作为基本查询执行时不能这样做。
SELECT * FROM persons;
SELECT * FROM addresses;
可能吗?语法是什么?
编辑:
我正在使用 Ruby 的 DBI 库:
dbh.query("SELECT * FROM persons; SELECT * FROM addresses;")
【问题讨论】:
如果数据相关,则使用 JOIN 将地址项连接到人员项。如果您的表都包含相似的列,您可能需要这样的 UNION SELECT:
从人中选择 * 联盟 从地址中选择 *;
【讨论】:
您是从 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 库会执行此操作。
【讨论】:
加入人员和地址,您可以获得一个大的结果表,假设地址与具有某些标识符的人员相关联。如果这两个查询不相关,为什么要将它们放在一起?
【讨论】:
Model.includes(:another_model).find(...) 请求,当前的 Rails 发行版会决定不使用连接,支持两个不同的选择查询。我很确定这是故意的(可能会减少内存开销,因此最终会更快)。