J'ai deux tables Table1 et Table2. Le tableau 1 contient les colonnes ID, stringIDs et Table2 Columns ID, données
J'ai créé un déclencheur pour supprimer des lignes en fonction de la table1. cela ne fonctionne pas si les identifiants de chaîne séparés par des virgules sont plusieurs. cela fonctionne si stringIDs n'est qu'une valeur unique
create trigger tgTriggerName after delete
on Table1
begin
delete from Table2 where ID in (old.stringIDs);
end
Les 'stringID' de la table1 les enregistrent dans une autre table avec une référence de clé étrangère, puis appliquent le déclencheur sur la nouvelle table pour supprimer les enregistrements de la table 2
Gordon a raison, cette structure de table est vraiment probablement pas ce que vous voulez. Mais si pour une raison quelconque vous devez le faire de cette façon, cette requête peut accomplir ce que vous voulez:
delete from Table2
where ID = old.stringIDs -- ID matches exactly
or old.stringIDs like ID + ',%' -- Or ID is at beginning of list
or old.stringIDs like '%,' + ID -- Or ID is at end of list
or old.stringIDs like '%,' + ID + ',%' -- Or ID is in middle of list
Mais c'est un gâchis. Ne le fais pas Au lieu de cela, supprimez la colonne stringIDs de Table1 et ajoutez une colonne à Table1ID
appelée Table1ID
pour indiquer à quel ID Table1 cet enregistrement Table2 appartient. Donc, Table2 ressemblerait à ceci
ID Table1ID Data
1 1 some data
2 1 some data
3 2 some data
4 2 some data
5 2 some data
...
Ensuite, votre requête de déclenchement peut être simplement:
delete from Table2
where Table1ID = old.ID
Encore plus propre serait de sauter le déclencheur complètement et de faire une contrainte de clé étrangère avec une suppression en cascade. Mais j'ai le sentiment que c'est une leçon pour un autre jour.