2014-10-06 43 views
3

編輯使用連字符:已經使用SQLiteBrowser作爲一個IDE \工具SQLite的 - 在列別名

的SQLite不是頻繁使用的用戶 - 請原諒我的無知。 以下查詢是較大查詢的一部分;

SELECT DISTINCT T1.Material AS "Diameter", 
       T2.sLength AS "0-110mm", 
       T3.sLength AS "110-160mm", 
       T4.sLength AS "225-300mm", 
       T5.sLength AS "300-450mm", 
       T6.sLength AS "450-600mm", 
       T7.sLength AS "600mm-" 
FROM "mycte" T1 
     LEFT JOIN "mycte" T2 
       ON T1.Material = T2.Material 
       AND T2.Diameter = "0-110mm" 
     LEFT JOIN "mycte" T3 
       ON T1.Material = T3.Material 
       AND T3.Diameter = "110-160mm" 
     LEFT JOIN "mycte" T4 
       ON T1.Material = T4.Material 
       AND T4.Diameter = "225-300mm" 
     LEFT JOIN "mycte" T5 
       ON T1.Material = T5.Material 
       AND T5.Diameter = "300-450mm" 
     LEFT JOIN "mycte" T6 
       ON T1.Material = T6.Material 
       AND T6.Diameter = "450-600mm" 
     LEFT JOIN "mycte" T7 
       ON T1.Material = T7.Material 
       AND T7.Diameter = "600mm-" 
WHERE T1.Material <> '' 

雖然我在別名中使用帶有單個連字符\的別名,但這些字段會返回空白。 如果我將別名「0-110mm」重命名爲「0--110mm」,那麼該列的字段會返回數據。 這似乎是一個單一的連字符\正在搞砸事情。

任何想法? 在此先感謝。

+0

哪種編程語言是您使用訪問SQLite的? – 2014-10-06 19:47:16

+0

SQL - 使用SQLiteBrowser(允許CTE),但客戶端在SQLiteStudio上(不允許CTE!)。要回答你的問題,我不是從應用程序代碼調用。 – MarkD 2014-10-07 15:28:46

回答

0

最好我設法得出了它。只需要處理名稱中的尾部空格。

SELECT DISTINCT 
    T1.Material AS "Diameter" 
    ,T2.sLength AS [0-110mm ] 
    ,T3.sLength AS [110-160mm ]   
    ,T4.sLength AS [160-225mm ] 
    ,T5.sLength AS [225-300mm ]  
    ,T6.sLength AS [300-450mm ]  
    ,T7.sLength AS [450-600mm ] 
    ,T8.sLength AS [600mm- ] 
FROM "MyCTE" T1 
LEFT 
JOIN "MyCTE" T2 ON T1.Material = T2.Material AND T2.Diameter = "0-110mm" 
LEFT 
JOIN "MyCTE" T3 ON T1.Material = T3.Material AND T3.Diameter = "110-160mm" 
LEFT 
JOIN "MyCTE" T4 ON T1.Material = T4.Material AND T4.Diameter = "160-225mm" 
LEFT 
JOIN "MyCTE" T5 ON T1.Material = T5.Material AND T5.Diameter = "225-300mm"  
LEFT 
JOIN "MyCTE" T6 ON T1.Material = T6.Material AND T6.Diameter = "300-450mm" 
LEFT 
JOIN "MyCTE" T7 ON T1.Material = T7.Material AND T7.Diameter = "450-600mm" 
LEFT 
JOIN "MyCTE" T8 ON T1.Material = T8.Material AND T8.Diameter = "600mm-" 
+0

馬克,你正在使用哪種版本的SQLite?此外,我從早些時候收回我的答案! – Drew 2014-10-06 18:01:08

+0

我不確定如何確定SQLite的版本,但是當在記事本中打開數據庫文件時,我會看到「SQLite格式3」作爲文件的第一部分。 – MarkD 2014-10-07 15:25:48

-1

不要在別名中使用雙引號或方括號。改用單引號。這可能會解決問題。有一天我有類似的問題,不一樣但相似。

https://www.sqlite.org/lang_keywords.html

「關鍵字」單引號中的關鍵字是一個字符串文字。 「keyword」雙引號中的關鍵字是一個標識符。 [關鍵字]方括號內的關鍵字是一個標識符。這不是標準的SQL。此引用機制由MS Access和SQL Server使用,幷包含在SQLite中以實現兼容性。

0

我不知道你正在使用的SQLite的版本,但下面撥弄表明您最初的辦法正常工作:

http://sqlfiddle.com/#!7/20222/1

CREATE TABLE test 
    ( 
    col1 VARCHAR(100) 
); 

INSERT INTO test 
      (col1) 
SELECT 'foo' 

SELECT col1 AS "col-1" 
FROM test 
+0

謝謝德魯 - 我開始懷疑問題是不是因爲我使用的工具\ IDE \瀏覽器。我使用SQLIteBrowser(它允許CTE),但客戶端在SQLiteStudio(它不允許CTE!)。將看看別名問題是否仍然存在... – MarkD 2014-10-07 15:27:37

+0

@MarkD歡迎。並陷入困境。另外,它看起來好像SQLite一般支持CTE?另外,你是否試圖通過命令行界面執行語句到sqlite? – Drew 2014-10-07 17:24:32

+0

另外,http://www.sqlite.org/lang_with.html! – Drew 2014-10-07 18:12:22