2010-11-24 5 views
0
  1. Clients (Id, nom ...)
  2. Produits (id, nom ...)
  3. Clients_Products (client_id, product_id)

I ajouté 10 Les clients et moi devons mettre à jour la table de jointure (clients_products) et ajouter un nouvel enregistrement pour chaque produit et chaque client.SQL Server, pour chaque instruction

Existe-t-il un moyen de faire une double boucle ou quelque chose dans le studio de gestion SQL Server ou quelque chose?

Puis j'ai supprimé les 10 lignes, mais je veux créer ces 10 lignes et les joindre directement à tous les produits. (veuillez reformuler cette dernière phrase - n'a aucun sens)

une aide? thx

Je peux le faire par programmation avec vb .net mais je pense qu'il y aurait un moyen d'y parvenir.

Répondre

1

Cela nécessite une jointure croisée

INSERT INTO clients_products (client_id, product_id) 
SELECT c.ID, p.ID 
FROM Clients c 
CROSS JOIN Products p 
LEFT JOIN clients_products cp 
    on c.client_id and p.product_id 
WHERE cp.client_id is null and p.product_id is null 
1
INSERT INTO Clients_Products 
SELECT c.Id, p.Id 
FROM Clients c 
JOIN Products p on 1=1 
WHERE c.Name in ('NEW CLIENT 1', 'NEW CLIENT 2') 
0

Si je comprends bien votre question, vous demandez une jointure cartésienne de la table à la fois:

insert into clients_products 
select 
    clients.id,products.id 
from clients 
    cross join products 
Questions connexes