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

Java 从另一个mysql查询中选择的mysql查询,java,sql,mysql,ms-access,jdbc,Java,Sql,Mysql,Ms Access,Jdbc,我正在使用java前端从ms access数据库迁移到mysql数据库,这样我的应用程序也可以在linux中使用 在ms access中,我会这样做 转到创建查询。写一个select语句。调用将查询的名称指定为query1。 双击查询1时,您将以表格形式获得select语句的结果。 接下来我将编写一个query2,它也是一个select查询。此查询不是从表中获取数据,而是从查询1中获取数据,例如从查询1中选择a、b 现在我在使用java的mysql数据库上 查询1中select a,b的java

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

在ms access中,我会这样做 转到创建查询。写一个select语句。调用将查询的名称指定为query1。 双击查询1时,您将以表格形式获得select语句的结果。 接下来我将编写一个query2,它也是一个select查询。此查询不是从表中获取数据,而是从查询1中获取数据,例如
从查询1中选择a、b

现在我在使用java的mysql数据库上 查询1中select a,b的java语句是什么

我的意思是,我将使用jdbc连接到mysql。 你有这样的疑问吗

string query1 = " select * from users " ;
然后使用executeQuery(查询1)执行查询

但是我想我做不到这样的事情

string query2 = " select a,b from query1 " ;
然后执行(查询2)


那么出路是什么呢?

您可以在MySQL中完成这一切。这个查询看起来像

select * from table2 where user_id in (select user_id from users)
SELECT * FROM (
 SELECT * FROM users
) query1;

您可以执行嵌套查询(子查询),如@muffinista

但我认为您正在寻找视图:

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

你可以

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

select * from q1 where f2<100
将视图q1创建为
从f1>1的表1中选择*

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

我有两种方法:

视图:

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

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

子查询(嵌套查询)

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

您可以编写如下代码,以便在数据库中仅查找客户的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
在我的工作中,我倾向于使用大部分子查询,因为我发现它们比视图运行得快得多,但您的体验可能会有所不同