2017-09-22 4 views

Répondre

1

On dirait que vous essayez d'utiliser une instruction d'insertion de sélection:

INSERT INTO srs1.modulegrades 
SELECT  srs1.student.student_id, 
      srs1.modules.module_id, 
      FLOOR(RANFOM() * 10)) 
FROM  srs1.student, srs1.modules; 

Notez que implicite des jointures (ayant plus de table dans la clause from) sont considérés comme dépréciée , et vous seriez bien mieux d'utiliser une croix jointure explicite:

INSERT INTO srs1.modulegrades 
SELECT  srs1.student.student_id, 
      srs1.modules.module_id, 
      FLOOR(RANFOM() * 10)) 
FROM  srs1.student 
CROSS JOIN srs1.modules; 
+0

Merci, qui a travaillé. Pas la façon dont je m'attendais, mais c'est ma logique plutôt que le code –

+0

J'essaie maintenant d'obtenir que student_id ne se produise que 4 fois. Comment pourrais-je m'y prendre? –

1

insertion dans une relation de relation existant nécessite un SELECT clause. Une clause values est utilisée pour créer dynamiquement une relation pour l'entrée de données dans le système.

grâce à melpomene utilisateur pour les éléments suivants:

Relevant part of the documentation. Notez que VALUES ... et query sont listés comme alternatives; c'est-à-dire que vous ne pouvez pas avoir à la fois VALUES et SELECT ... FROM.

Ce qui suit devrait fonctionner pour votre base de données:

INSERT INTO srs1.modulegrades 
    SELECT srs1.student.student_id 
     , srs1.modules.module_id 
     , floor(random() * 10) 
    FROM srs1.student, srs1.modules; 
+1

Partie pertinente de la documentation: https://www.postgresql.org/docs/current/static/sql-insert.html. Notez que 'VALUES ...' et ** _ query _ ** sont listés comme alternatives; c'est-à-dire que vous ne pouvez pas avoir à la fois 'VALUES' et' SELECT ... FROM'. – melpomene

+0

Merci @melpomene, je vais ajouter cela à ma réponse. –