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

标签 java sql mysql ms-access jdbc

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

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

现在我在使用 java 的 mysql 数据库上 select a,b from query1 的 java 语句是什么?

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

string query1 = " select * from users " ;

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

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

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

然后执行Query(query2)

那么出路在哪里呢?

最佳答案

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

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

观点:

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

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

子查询(嵌套查询)

正如其他人所提到的,子查询是在一个查询中编写多个查询的好方法。使用子查询时,无需将查询名称(如在 Access 中)或 View 名称(如上文所述)放在代码的 SELECT 部分,只需粘贴子查询的整个 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

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

关于java - 从另一个 mysql 查询中选择的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1881266/

相关文章:

Java代码 - 线程相互阻塞

sql - Visual Studio 2010 数据库版本架构比较,其中目标是 dbproj

sql - 在组查询中选择第一个

mysql - SQL - 将属性值设置为同一记录中另一个属性的值

php - MySQL 具有大表和高访问权限 - 下一步升级是什么?

php - MYSQL 选择查询返回不期望的结果

java - 生成 Hibernate 映射文件时未创建注释

java - 如何通过读取文件并将其写入另一个文件来为我的类(class)编写单元测试?

sql - 删除重复的子查询

java - 如何计算给定参数中的空格?