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 |
3 Réponses :
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);
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
Vous avez besoin d'un auto-join pour Sociétés code> Table et une logique d'itération pour produire des valeurs de colonne ID code> pour Vacances CODE>. Alors, envisagez d'utiliser:
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;