2011-11-09 70 views
0

我在MySQL中遇到了一個查詢或表中的問題,我花了很多時間來解決它,但我仍然沒有答案。所以我需要你的幫助。如何從MySQL中的特殊表結構查詢信息?

表的格式是類似的東西

------------------------------------------------------------- 
col1 | col2 | col3 | col4 | col5 | col6 | 
------------------------------------------------------------- 
    a |  b | c  | null | null | null | 
------------------------------------------------------------- 
null | null | null | 1  | 2 | 3  | 
------------------------------------------------------------- 
    null | null | null | 4  | 5 | 6  | 
------------------------------------------------------------- 
    null | null | null | 7  | 8 | 9  | 
------------------------------------------------------------- 
    d | e  | f  | null | null | null | 
------------------------------------------------------------- 
    null | null | null | 10 | 11 | 12 | 
------------------------------------------------------------- 
    null | null | null | 13 | 14 | 15 | 
------------------------------------------------------------- 
    null | null | null | 16 | 17 | 18 | 
------------------------------------------------------------- 
... 

表有一個這樣的結構,因爲它從一個大尺寸的csv文件(約30萬線)加載數據。所有我想要的是寫一個mysql語句,以最快的時間查詢記錄,它的結果是格式:

(a,b,c,1,2,3),(a,b,c, 4,5,6),(A,b,C,7,8,9),(d,E,F,10,11,12),(d,E,F,13,14,15),( d,e,f,16,17,18)...

但是......怎麼樣?請幫我解決問題。 Thks提前

+1

你最好是按摩數據客戶端,而不是試圖提出一個查詢,它既要看向前(1,2,3值)和向後。 –

+0

Thks for commenting。但問題是它必須從大尺寸的csv文件加載數據到該mysql表(爲了獲得最快的性能),我的任務是從這個表結構獲取客戶端模塊的信息。記錄數大於以上的次數。 :( –

+0

這很好,但我說,在將.csv加載到表中後,應該運行另一個查詢,逐行循環並填充缺失的數據。雖然有點乏味要創建一個可以看起來「返回」以填充缺失數據的查詢(因此,a,b,c值會被轉移到它們缺失的行中),因此很難做出看起來正確的查詢,所以在a,b,c行丟失空值填充 –

回答

2

看起來很醜,但工程。

SELECT * FROM (
SELECT 
    IF(col1 IS NULL,@c1,@c1:=col1) AS col1, 
    IF(col2 IS NULL,@c2,@c2:=col2) AS col2, 
    IF(col3 IS NULL,@c3,@c3:=col3) AS col3, 
    col4, col5, col6 
FROM 
    [table name], 
    (SELECT @c1:=0, @c2:=0, @c3:=0) x 
) y WHERE col4 IS NOT NULL; 
+0

+1 Good one ;-) – Devart

+0

+1是的,這非常好,但是當查詢很多記錄時,它是否最適合?非常感謝您。 –

+0

你在上面的查詢中使用了變量,但是如果我想從那個創建一個視圖,wha t解決方案是? mySQL中的視圖不支持子查詢和變量 –