0
votes

Obtenez tous les identifiants d'une table et insérez des valeurs dans une autre table en fonction de celui-ci.

J'ai deux tables:

Tableau 1: Sociétés (ID, Nom) Tableau 2: Vacances (ID, Comparaison, Nom) P>

Actuellement, les entreprises ont des données, mais les vacances pas. Je veux parcourir toutes les entreprises, obtenir leur identifiant et insérer deux records en vacances pour chaque entreprise. Cela serait donc avant et après: p>

Avant: P>

Holidays:
| id | companyId | name     | 
|  0 |         0 | holiday1 |
|  1 |         0 | holiday2 |
|  2 |         1 | holiday1 |
|  3 |         1 | holiday2 |


0 commentaires

3 Réponses :


1
votes

Assumer les vacances.Id est défini sur Auto Incrément:

insert into Holidays (select id as companyId, 'holiday1' as name from Companies);
insert into Holidays (select id as companyId, 'holiday2' as name from Companies);


2 commentaires

Vous ne pouvez pas forcer une valeur incrémentée automatique pour commencer à partir de zéro: Réponse associée


Oui. J'ai des problèmes avec ça. Comment puis-je éviter ça? Il dit que le nombre de colonnes ne correspond pas à la valeur de valeur si je ne fournis aucune valeur pour l'incrément automatique, la colonne ID est définie comme AI



1
votes

Vous avez besoin d'un auto-join pour Sociétés Table et une logique d'itération pour produire des valeurs de colonne ID pour Vacances . Alors, envisagez d'utiliser: xxx

Démo


0 commentaires

0
votes

Je pense que vous voulez:

insert into holidays (id, companyId, name)
    select (@rn := @rn + 1) as id,
           c.companyId, h.name
    from companies c cross join
         (select 1 as ord, 'holiday1' as name union all
          select 2 as ord, 'holiday2'
         ) h cross join
         (select @rn := 0) params
    order by c.companyId, h.ord;


0 commentaires