2009-05-06 3 views
0

J'ai une table pour les utilisateurs (nom d'utilisateur, mot de passe .. etc) et un autre pour les produits (nom du produit, le prix, la quantité, le nom d'utilisateur .. etc)Comment puis-je insérer à partir de plusieurs tables en une seule?

Je veux que le nom d'utilisateur de la première table être inséré (avec le reste de l'information sur le produit) dans la table des produits lorsque l'utilisateur l'a mis en vente.

Comment est-ce que je peux faire ceci?

J'utilise développeur web visuel 2008 exprimer

+0

J'ai essayé les deux sens et j'ai eu le même problème « doit déclarer la variable scalaire @ProductName » qui est déjà déclaré plus je n'obtiens ce message lorsque j'insère seulement à la table d'information Produits sans rien sélectionner à partir Table des utilisateurs – KmOj86

+0

Essayez-vous d'exécuter une instruction sql directement, ou utilisez-vous un contrôle asp.net ou autre chose? Je suppose que ce dernier puisque vous êtes mentinoing vs webdev. De toute façon, montrez-nous le code afin que nous puissions voir ce qui échoue. – ahains

Répondre

1
INSERT INTO product_information (username,product_name, ...., Date) 
SELECT username, 'Book',....., Date 
FROM users; 

quelque chose le long de cette ligne

+0

Cela ne correspond pas exactement à plusieurs histoires? 'Livre' ne devrait pas être dans la table des utilisateurs ...mais aussi la question d'ouverture n'est pas 100% clair ... – PatTech

+0

désolé mais je ne sais pas ce qui n'est pas clair dans ma question – KmOj86

0

Si vous avez Linq (.NET 3.5/C# 3.0):

var users = from u in userTable 
      from p in productTable 
      where p.username = u.username 
      select new productDetails() 
      { 
       username = u.username, 
       price = p.price 
      } 

puis newtable .insertAllOnSubmit (utilisateurs);

si sql droit

insert into newtable 
select table1.value1, table2.value1 
from table1, table2 
where table1.username = table2.username 

Edit:

à ... clarifient valeur1 et valeur2 sont des colonnes des cas correspondants. Vous en aurez un pour chaque paramètre que vous voulez insérer. Et votre newtable devient table1

+0

qu'est-ce que tu veux dire par valeur1 et valeur2? BTW Je veux insérer à partir de table1 et table2 dans le tableau 1 il n'y a pas d'autre table – KmOj86

+0

clarification annexée – PatTech

0

Votre question n'a pas vraiment de sens. Il semble que vous voulez insérer dans une table (Products) et l'un des champs est également dans une autre table (User.username). D'où vient le reste des données pour Products? Tu ne peux pas insérer le nom d'utilisateur directement?

Insert into products (name, price, username) values (?, ?, ?) 

Utilisez le mécanisme que vous souhaitez transmettre dans les données à cette instruction SQL.

Si, cependant, vous avez en fait une troisième table, dire, « Prod_for_sale » et que vous voulez insérer un tas de données dans cette table, à la fois Users et Products, vous pouvez faire quelque chose comme ça (comme suggéré par Rick J, mais cet exemple a deux tables):

insert into products for sale (username, user_country, product_name, product_price) 
select u.username, u.country, p.name, p.price 
from products p, users u 
where p.id = ? 
    and u.username = ? 

vous pouvez ensuite copier toutes les données que vous voulez à partir des tables en question dans la table de destination. Un conseil cependant: vous devriez utiliser un identifiant d'utilisateur au lieu d'un nom d'utilisateur pour identifier les données de l'utilisateur dans la base de données. Cela vous permettra de modifier votre politique de nom d'utilisateur plus tard ou de permettre la mise à jour des noms d'utilisateur, etc. Généralement, essayez de faire tous vos numéros d'identifiants et vous vous épargnerez des soucis dans le futur.

Questions connexes