2014-10-06 5 views
3

EDIT: использовали 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-110 мм» на «0-110 мм», поля столбца вернут данные. Казалось бы, один дефис \ минус все испортит.

Любые идеи? Спасибо заранее.

+0

Какой язык программирования вы используете для доступа к SQLite? –

+0

SQL - использование SQLiteBrowser (что позволяет CTE), но клиент находится на SQLiteStudio (что не позволяет CTE!). Чтобы ответить на ваш вопрос, я не звоню из кода приложения. – MarkD

ответ

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

Mark, в какой версии SQLite вы используете? Кроме того, я откладываю свой ответ раньше! – Drew

+0

Я не уверен, как определить версию SQLite, но при открытии файла db в блокноте я вижу «формат SQLite 3» в качестве первой части файла. – MarkD

-1

Не используйте двойные кавычки или квадратные скобки для своих псевдонимов. Вместо этого используйте одинарные кавычки. Это может решить проблему. У меня была аналогичная проблема на днях, не то же самое, но похожее.

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

«ключевое слово» Ключевое слово в одинарные кавычки строковый литерал. «keyword» Ключевое слово в двойных кавычках - это идентификатор. [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 \ browser. Я использовал SQLIteBrowser (который позволяет CTE), но клиент находится на SQLiteStudio (который не позволяет CTE!). Увидит, сохраняется ли проблема с псевдонимом ... – MarkD

+0

@MarkD приветствуется. И получил. Кроме того, похоже, что SQLite поддерживает CTE в целом? Кроме того, попытались ли вы выполнить оператор через интерфейс командной строки для sqlite? – Drew

+0

Кроме того, http://www.sqlite.org/lang_with.html! – Drew

Смежные вопросы