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

时间:2009-12-10 14:16:49

标签: java sql mysql ms-access jdbc

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

在ms访问这里是我会做的 去创建查询。写一个select语句。 call将查询的名称作为query1。 当双击query1时,您将以表格形式获得select语句的结果。 接下来我会写一个查询2,它也是一个选择查询。此查询将不是从表中获取数据,而是查询1,例如select a,b from query1;

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

我的意思是说我将使用jdbc连接到mysql。 有这样的query1

string query1 = " select * from users " ;

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

但我不认为我可以做这样的事情。

string query2 = " select a,b from query1 " ;

然后执行Query(query2)

那么出路是什么?

4 个答案:

答案 0 :(得分:1)

您可以在MySQL中完成所有操作。查询看起来像

SELECT * FROM (
 SELECT * FROM users
) query1;

答案 1 :(得分:1)

你可以像@muffinista建议那样进行嵌套查询(子查询)。

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

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

你可以

create view q1 as 
select * from table1 where f1>1

select * from q1 where f2<100

答案 2 :(得分:1)

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

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

<强>视图:

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

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

SUBQUERIES(NESTED QUERIES)

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

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

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

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

答案 3 :(得分:0)

select * from table2 where user_id in (select user_id from users)