我正在从 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/