2017-10-06 4 views
0

Je souhaite JOINDRE 2 bases de données.Erreur de syntaxe INNER JOIN

  • 1 base de données est keyword_data (cartographie mot-clé)
  • base de données
  • 1 est rempli de classement de Google et d'autres paramètres

D'une certaine façon, je ne peux pas adhérer à ces deux bases de données.

Certains contexte:

NOM SET DATA: visibilité

TABLEAU 1

keyword_data

VALEURS

  • mot-clé
  • univers
  • catégorie
  • search_volume
  • cpc

DATA SET NOM: visibilité

TABLEAU 2

res ÜLTS

VALEURS

  • Date de
  • Mot
  • Site
  • Position

Afin de recevoir des données classement par date, j'ai écrit la ligne SQL suivante.

SELECT Date, Position, Website FROM `visibility.results` Keyword INNER 
JOIN `visibility.keyword_data` keyword ON `visibility.results` Keyword 
= `visibility.keyword_data` keyword GROUP BY Date; 

(En outre, 100 autres lignes sans succès ;-))

J'utilise Google BigQuery pour cela avec SQL standard (SQL sans contrôle Legacy). Comment puis-je joindre ces 2 tables de données à

?

+0

Quel est votre résultat attendu? - fournir des exemples –

Répondre

2

À quel point connaissez-vous SQL? Je pense que vous utilisez des alias mal, quelque chose comme cela devrait fonctionner

SELECT r.Date, r.Position, r.Website 
FROM `visibility.results` AS r 
INNER JOIN `visibility.keyword_data` AS k 
ON r.Keyword = k.keyword 
GROUP BY DATE 
+0

j'apprends :-) l'erreur suivante: erreur: référence l'expression de la liste SELECT r.Position qui est ni regroupées ni agrégées Est-il possible, il a quelque chose à voir avec la position de « AS » ? – Marc

+0

Semble une chose Google BigQuery, que je ne connais pas, désolé – kero

+1

Ce n'est pas spécifique à BigQuery. Lorsque vous utilisez GROUP BY, chaque colonne de la liste SELECT doit apparaître dans la liste GROUP BY ou être le résultat d'une fonction d'agrégation (telle que SUM, COUNT, etc.). 'GROUP BY Date, Position, Website' fonctionnerait, par exemple. –

0

Tout d'abord je ne l'ai jamais travaillé avec Google BigQuery mais il y a deux ou trois choses mauvaises à mon avis, avec cette requête.Pour commencer par joindre des tables en incluant le nom de la table, vous devez fournir la clé à laquelle les tables sont jointes. De même, si vous n'utilisez pas les fonctions d'agrégation (MIN/MAX, etc.) dans votre instruction select, vous devez également inclure toutes les valeurs dans la clause group by. En référence je peux vous fournir une solution qui fonctionnerait si vous utilisiez Microsoft SQL Server si cela pouvait vous aider car si vous référencez here, la syntaxe est assez similaire.

SELECT results.Date AS DATE, 
     ,results.Position AS POSITION 
     ,results.Website AS WEBSITE 
FROM visibility.dbo.keyword_data AS keyword_data 
INNER JOIN visibility.dbo.results AS results 
ON results.keyword = keyword_data.keyword 
GROUP BY results.Date 
     ,results.Position 
     ,results.Website