首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个mysql查询中选择的mysql查询

从另一个mysql查询中选择的mysql查询
EN

Stack Overflow用户
提问于 2009-12-10 22:16:49
回答 4查看 395关注 0票数 1

我正在从ms access数据库迁移到带有java前端的mysql数据库,这样我的应用程序也可以在linux上使用。

在ms access中,我将执行以下操作来创建查询。编写select语句。调用时,将查询的名称指定为query1。当双击query1时,您将以表格形式获得select语句的结果。接下来,我将编写一个query2,它也是一个select查询。这个查询不是从表中获取数据,而是从query1中获取数据,例如select a,b from query1;

现在我在使用java的mysql数据库上,从query1中选择a,b的java语句是什么?

我想说的是,我将使用jdbc连接到mysql。让query1像这样

代码语言:javascript
复制
string query1 = " select * from users " ;

然后使用executeQuery(query1)执行查询

但是我想我不能做这样的事情。

代码语言:javascript
复制
string query2 = " select a,b from query1 " ;

然后是executeQuery(query2)

那么出路是什么呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-10 22:40:07

当我从使用MS Access转到对MySQL数据库使用大量SQL查询时,我遇到了完全相同的问题。

我有两种方法来解决这个问题:

视图:

视图是一种很好的方法来模拟Access中的许多功能。我真正喜欢Access的一点是,它能够将我的SQL分成较小的查询,然后在其他查询中重用这些查询。视图允许您执行基本相同的操作,即在一个视图中定义一个查询,然后您可以针对该原始视图编写另一个查询或视图。

然而,根据我的经验,视图往往非常慢,特别是在引用计算列时。在MySQL中,我很少使用视图(尽管其他人可能已经找到了实现视图的有效方法)。

子查询(嵌套查询)

正如其他人提到的,子查询是在一个查询中编写多个查询的好方法。对于子查询,您只需粘贴子查询的整个SELECT语句,而不是将查询名称(如Access中的名称)或视图名称(如上所述)放入代码的SQL部分。

您可以像这样编写代码,以便在数据库中仅查找客户的2009年销售和销售人员姓名:

代码语言:javascript
复制
SELECT
customer.Name,
customer.AccountNumber,
customer.SalespersonName,
ch.`2009 Sales`
FROM
customer
Left Join (
    SELECT
    customerhistory.AccountNumber,
    SUM ( CASE WHEN customerhistory.`Year` = 2009 
               THEN customerhistory.`Sales` 
               ELSE 0 
               END
        ) AS `2009 Sales`
    FROM
    customerhistory
    GROUP BY
    customerhistory.AccountNumber
) ch ON customer.AccountNumber = ch.AccountNumber

在我的工作中,我倾向于使用子查询,因为我发现它们的运行速度比视图快得多,但您的体验可能会有所不同。

票数 1
EN

Stack Overflow用户

发布于 2009-12-10 22:20:52

您可以在MySQL中完成所有这些工作。该查询将如下所示

代码语言:javascript
复制
SELECT * FROM (
 SELECT * FROM users
) query1;
票数 1
EN

Stack Overflow用户

发布于 2009-12-10 22:27:59

您可以像@muffinista建议的那样执行嵌套查询(子查询)。

但我认为你在寻找视图:http://dev.mysql.com/doc/refman/5.0/en/create-view.html

简而言之,视图是一个“伪表”,它是查询的结果。

你可以的

代码语言:javascript
复制
create view q1 as 
select * from table1 where f1>1

select * from q1 where f2<100
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1881266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档