【问题标题】:mysql query which selects from another mysql query从另一个mysql查询中选择的mysql查询
【发布时间】:2010-12-25 06:34:24
【问题描述】:

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

在 ms 访问这就是我要做的 去创建查询。写一个选择语句。 call 将查询的名称命名为 query1。 双击 query1 时,您将以表格形式获得 select 语句的结果。 接下来我会写一个query2,它也是一个选择查询。此查询将不是从表中获取数据,而是从 query1 获取数据,例如 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)

那么出路是什么?

【问题讨论】:

    标签: java sql mysql ms-access jdbc


    【解决方案1】:

    当我从使用 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
    

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

    【讨论】:

      【解决方案2】:

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

      SELECT * FROM (
       SELECT * FROM users
      ) query1;
      

      【讨论】:

        【解决方案3】:

        您可以像@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
        

        【讨论】:

          【解决方案4】:
          select * from table2 where user_id in (select user_id from users)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多