2009-12-10 123 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