2009-08-18 5 views
6

constante Les grandes lignes des tableaux en question sont les suivantes:Insérer les résultats de sous-requête dans la table avec une

J'ai une table, permet d'appeler Prenez part, qui a deux colonnes, les deux clés étrangères à d'autres tables. Appelons les deux colonnes id_utilisateur et ID_module, de sorte que la jointure ressemble à

+--------------+ 
| join   | 
|--------------| 
|userid  | 
|buildingid | 
+--------------+ 

Je dois essentiellement insérer un groupe de lignes dans cette table. Chaque utilisateur sera affecté à plusieurs bâtiments en ayant plusieurs entrées dans cette table. Ainsi, l'utilisateur 13 peut être attribué aux bâtiments 1, 2 et 3 par le

13 1 
13 2 
13 3 

suivant, je suis en train de comprendre comment faire cela dans une requête si les numéros de construction sont constants, c'est, je m assigner un groupe de personnes aux mêmes bâtiments. Fondamentalement, (c'est faux) Je veux faire

insert into join (userid, buildingid) values ((select userid from users), 1) 

Est-ce logique? J'ai également essayé d'utiliser

select 1 

L'erreur que je rencontre est que la sous-requête renvoie plus d'un résultat. J'ai également tenté de créer une jointure, essentiellement avec une requête de sélection statique qui a également échoué.

Des pensées?

Merci, Chris

Répondre

20

Presque! Lorsque vous souhaitez insérer aux valeurs d'une requête, n'essayez pas de les placer dans la clause values. insert peut prendre un select comme argument pour les valeurs!

insert into join (userid, buildingid) 
select userid, 1 from users 

En outre, dans l'esprit d'en apprendre davantage, vous pouvez créer une table qui n'existe pas en utilisant la syntaxe suivante:

select userid, 1 as buildingid 
into join 
from users 

Cela ne fonctionne que si la table n'existe pas, cependant, mais c'est une manière rapide et sale de créer des copies de table!

+0

Pâte! Tellement proche! C'était ça! À titre d'éclaircissement, est-il possible d'enchaîner plusieurs instructions select pour faire plusieurs insertions, comme vous le pouvez lorsque vous utilisez la clause values? –

+1

Pas en T-SQL, malheureusement. Si vous utilisez MySQL, cela permet de chaîner 'values' ensemble. Ce que vous * pouvez * faire est: insérer dans join (id_utilisateur, ID_structure) sélectionner * parmi (sélectionner 1, 1 union tous sélectionner 2, 1 union tous sélectionner 3, 1 ...) '. – Eric

+0

Ah, très intelligent. Merci encore pour votre aide! –

Questions connexes