我有以下問題,我正在努力尋找最佳解決方案。假設我有如下觀點:
CREATE VIEW myView AS (
SELECT
country_code,
other_column,
COUNT(1) as cnt
FROM mytable
JOIN otherDatabase.otherTable ON (id)
GROUP BY 1,2 ORDER BY 1 LIMIT 1
)
決議視圖的欄位名稱和型別的最快方法是什么?例如,在上面我希望得到一些類似的東西:
{
country_code: VARCHAR,
other_column: BOOL,
cnt: INT
}
- 第一種方法只是運行查詢(如有必要,有限制),然后從驅動程式獲取結果集的型別。這樣做的缺點是如果查詢需要 50 分鐘才能解決怎么辦?
- 我想到的第二種方法是“跟蹤”列以獲取它們的型別,然后進行一些決議以決議任何運算式/文字/等。這將涉及大量代碼,但會比上述代碼快幾個數量級。但是,這樣做的潛在缺點是我們可能可以訪問視圖但無法訪問包含列型別的表(可能在服務器上的另一個資料庫中),因此我們可能無法決議所有欄位名稱.
解決視圖型別的最佳方法是什么?注意我已將其標記為 MySQL,但我也想知道是否有更通用的方法來決議型別,或者它是否是非標準的并且需要在每個資料庫的基礎上完成更多作業?
更新:我相信正確的答案只是運行 a DESCRIBE myView,這會給我列名和型別而不運行查詢?
uj5u.com熱心網友回復:
至少在當前版本的 MySQL 中,INFORMATION_SCHEMA.COLUMNS保存視圖和基表的元資料:
mysql> create table mytable (id serial primary key, x int);
Query OK, 0 rows affected (0.01 sec)
mysql> create view v as select * from mytable;
mysql> select column_name, data_type from information_schema.columns where table_name='v';
------------- -----------
| COLUMN_NAME | DATA_TYPE |
------------- -----------
| id | bigint |
| x | int |
------------- -----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464313.html
下一篇:選擇多列但僅按1列分組
