2017-03-22 5 views
3

J'ai une base de données dans Cloudant où l'ID de document est _id. Après la réplication de ces données de Cloudant vers dashDB, j'ai deux tables distinctes que je veux joindre en utilisant cette colonne _id. Dans Run SQL j'ai essayé ci-dessous, mais cela ne fonctionnerait pas. Qu'est-ce que j'oublie ici? Ai-je besoin de remplacer le nom de colonne _id par quelque chose sans caractère de soulignement?Comment puis-je utiliser une colonne nommée _id à partir d'une table dashDB?

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

Recevez-vous une erreur spécifique? Si vous pensez que c'est le nom de la colonne '_id', vous pouvez essayer de placer des guillemets pour indiquer qu'il s'agit d'un nom d'objet:' internal join MOVIES_GENRE g sur m. "_ ID" = g. "_ ID"; Cependant, il est conseillé de renommer ces colonnes dans un format plus standard. – gmiley

Répondre

4

TL; DR: Comme @gmiley souligne le problème est provoqué par le nom de la colonne _ID, ce qui est un identifiant ordinaire (voir la définition ci-dessous) et doit donc être entre guillemets "_ID" ou guillemets simples '_ID' dans vos instructions SQL.

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

Contrairement identificateurs ordinaires identificateurs entre guillemets sont sensibles à la casse ("_id" est pas identique à "_ID" que title est identique à TITLE). Si vous deviez spécifier "_id" dans votre instruction, une erreur serait levée indiquant que la colonne n'a pas été trouvée. Puisque vous avez mentionné que vous avez utilisé le Cloudant warehousing process pour remplir vos tables DashDB, il vaut probablement la peine de mentionner que les noms de propriété sont en majuscules lorsque le DDL est généré lors de la découverte du schéma.

Exemple: Le contenu des documents JSON avec cette structure

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

sera mis en correspondance avec trois colonnes:

  • _ID de type VARCHAR(...)
  • _REV de type VARCHAR(...)
  • DATE_RECEIVED de tapez ...
  • ...

Espérons que cela aide!


De l'DB2 SQL reference:

Un identificateur ordinaire est une lettre majuscule suivie de zéro ou plusieurs caractères, dont chacun est une lettre majuscule, un chiffre ou un caractère de soulignement. Notez que les lettres minuscules peuvent être utilisées lors de la spécification d'un identifiant ordinaire, mais elles sont converties en majuscules lors du traitement. Un identifiant ordinaire ne devrait pas être un mot réservé.

Exemples: WKLYSALWKLY_SAL

Un identificateur délimité est une séquence d'un ou plusieurs caractères entourés par guillemets doubles. Les blancs principaux dans la séquence sont significatifs. Les espaces de fin dans la séquence ne sont pas significatifs, bien qu'ils soient stockés avec l'identificateur. Deux guillemets consécutifs sont utilisés pour représenter un guillemet dans l'identificateur délimité. De cette manière, un identifiant peut inclure des lettres minuscules.

Exemples: "WKLY_SAL""WKLY SAL""UNION""wkly_sal"