2009-12-10 124 views
1

我正在使用java前端从ms access数据库迁移到mysql数据库,这样我的应用程序也可以在linux中使用。从另一个mysql查询中选择的mysql查询

在MS访问这里是我会做什么 去创建查询。编写一个select语句。调用将查询的名称作为query1。 双击查询1时,您将得到表格形式的select语句的结果。 接下来我会写一个查询2,这也是一个选择查询。这个查询将获取数据不是从一个表,但查询1例如select a,b from query1;

现在我在一个mysql数据库使用java 什么是Java语句选择a,b从query1?

我的意思是说,我会连接到MySQL使用jdbc。 已经QUERY1这样

string query1 = " select * from users " ; 

然后使用的executeQuery(QUERY1)

执行查询,但我不认为我可以做这样的事情。

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

,然后的executeQuery(QUERY2)

那么什么是不可能的呢?

回答

1

我跑进了完全相同的问题,当我使用的MS Access使用了大量针对MySQL数据库的SQL查询的去了。

有两种方法,我会处理这:

浏览次数:

视图是模仿了很多在Access中的功能的好方法。我真正喜欢的Access之一就是能够将我的SQL分解成更小的查询,然后在其他查询中重用这些查询。视图允许你基本上做同样的事情,因为你在视图中定义了一个查询,然后你可以根据该原始视图编写另一个查询或视图。

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

子查询(嵌套查询)

正如其他人所说,子查询是一个查询中写多个查询的好方法。通过子查询,您不需要在代码的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 

在我的工作,我往往因为我发现他们跑快了很多大部分使用子查询比意见,但你的经验可能会有所不同。

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

你可以在MySQL中做到这一切。查询看起来像

SELECT * FROM (
SELECT * FROM users 
) query1; 
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