Как я могу использовать столбец с именем _id из таблицы dashDB?

У меня есть база данных в Cloudant с идентификатором документа _id.

После репликации этих данных из Cloudant в dashDB у меня есть 2 отдельные таблицы, к которым я хочу присоединиться, используя этот столбец _id. В Run SQL я попробовал следующее, но это не сработало. Что мне здесь не хватает? Нужно ли заменить имя столбца _id на что-то без подчеркивания?

select m.title, m.year, g.value 
from MOVIES m
inner join MOVIES_GENRE g on m._ID = g._ID;

person Margriet    schedule 22.03.2017    source источник
comment
Вы получаете конкретную ошибку? Если вы подозреваете, что это имя столбца _id, вы можете попробовать заключить его в двойные кавычки, чтобы указать, что это имя объекта: inner join MOVIES_GENRE g on m."_ID" = g."_ID"; Однако, если возможно, рекомендуется переименовать эти столбцы в более стандартный формат.   -  person gmiley    schedule 22.03.2017


Ответы (1)


TL;DR: как указывает @gmiley, проблема вызвана именем столбца _ID, которое не является обычным идентификатором (см. определение ниже) и поэтому должно быть заключено в двойные кавычки "_ID" или одинарные кавычки. '_ID' в ваших операторах SQL.

select m.title, m.year, g.value 
from MOVIES m
inner join MOVIES_GENRE g on m."_ID" = g."_ID";

В отличие от обычных идентификаторов, идентификаторы в кавычках чувствительны к регистру ("_id" не совпадает с "_ID", тогда как title идентично TITLE). Если бы вы указали "_id" в своем заявлении, возникла бы ошибка, указывающая, что столбец не найден.

Поскольку вы упомянули, что использовали Облачный процесс хранения для заполнения ваших таблиц DashDB, вероятно, стоит упомянуть, что имена свойств пишутся в верхнем регистре, когда DDL генерируется во время обнаружения схемы.

Пример: содержимое документов JSON с такой структурой

 {
  "_id": "000018723bdb4f2b06f830f676cfafd6",
  "_rev": "1-91f98642f125315b929be5b5436530e7",
  "date_received": "2016-12-04T17:46:47.090Z",
  ...
 } 

будет отображаться в три столбца:

  • _ID типа VARCHAR(...)
  • _REV типа VARCHAR(...)
  • DATE_RECEIVED типа ...
  • ...

Надеюсь это поможет!


Из справочника по SQL DB2< /а>:

Обычный идентификатор — это заглавная буква, за которой следует ноль или более символов, каждый из которых является заглавной буквой, цифрой или символом подчеркивания. Обратите внимание, что при указании обычного идентификатора можно использовать строчные буквы, но при обработке они преобразуются в прописные. Обычный идентификатор не должен быть зарезервированным словом.

Примеры: WKLYSAL WKLY_SAL

Идентификатор с разделителями — это последовательность из одного или нескольких символов, заключенная в двойные кавычки. Ведущие пробелы в последовательности являются значимыми. Конечные пробелы в последовательности не имеют значения, хотя они сохраняются вместе с идентификатором. Две последовательные кавычки используются для представления одной кавычки в идентификаторе с разделителями. Таким образом, идентификатор может включать строчные буквы.

Примеры: "WKLY_SAL" "WKLY SAL" "UNION" "wkly_sal"

person ptitzler    schedule 23.03.2017