2014-06-24 42 views
0

是否有可能做這樣的事情在MySQL的:動態數據庫名稱,而不使用存儲過程

選擇*,CONCAT(「」 SCHEMA_NAME,「MY_TABLE」)爲DATABASE_NAME from table_a a inner join table_b b on b.id = a.id inner join database_name c on a.id2 = c.id;

基本上,database_name的值取自現有查詢,也將用於相同的查詢中。

是否有可能做這樣的事情,而不使用存儲的過程? 如果沒有,是否可以在不使用循環的情況下在Java中執行此操作?

回答

0

在單個查詢中無法做到這一點。不過,它不需要存儲過程。

標識符在查詢中不能變;當需要提交SQL文本時,MySQL需要知道知道對象的名稱(表,列,函數等);標識符在執行時不能改變。

這不需要存儲過程,但它確實需要兩個單獨的SELECT語句。一個SELECT來檢索數據庫標識符。並且可以使用這些值來制定一個包含SQL文本的字符串,以便將另一個SELECT提交給數據庫。

+0

我現在正在做的一個解決方法(或可能是我能想到的唯一解決方案)是在java中,我循環所有結果,然後在循環內部,有另一個select語句。我認爲從長遠來看這會造成性能問題,尤其是在包含大量記錄的情況下,並且此查詢將用於管理員用戶的搜索屏幕,因此會有大量記錄。 – jaypax123

+0

@ user15167776:如果要查詢數十個或數百個表,則要麼需要運行數十個或數百個查詢,要麼將各個表的查詢合併爲一些巨大的$$ UNION ALL查詢。但是,當你有大量的表來查詢時,情況就是這樣。 – spencer7593