Contrainte en SQL
guillaume dupuy
-
Pinta -
Pinta -
Une question pas compliquée en sql mais je n'ai pas trouvé les réponses dans divers tutoriaux sauf peut être ici mais je ne peux pas encore le tester:
J'ai deux tables, disque et modèle.
Dans la table disque j'ai un champ disque_position et dans la table modèle j'ai un champ modele_max_disque.
Je veux une contrainte pour qu'à chaque fois que je rentre une ligne dans la table disque la valeur du champ disque_position soit strictement inférieur à la valeur du champ modele_max_disque
sachant que mon disque fait partie d'une machine qui elle a un modèle et donc une seule valeur de modele_max_disque.
Merci si quelqu'un comprend et résoud mon problème.
J'ai deux tables, disque et modèle.
Dans la table disque j'ai un champ disque_position et dans la table modèle j'ai un champ modele_max_disque.
Je veux une contrainte pour qu'à chaque fois que je rentre une ligne dans la table disque la valeur du champ disque_position soit strictement inférieur à la valeur du champ modele_max_disque
sachant que mon disque fait partie d'une machine qui elle a un modèle et donc une seule valeur de modele_max_disque.
Merci si quelqu'un comprend et résoud mon problème.
A voir également:
- Contrainte en SQL
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix ✓ - Forum MySQL
- Sql lister les tables ✓ - Forum Programmation
- Violation de contrainte unique - Forum Programmation
- Récupération serveur sql - Télécharger - Gestion de données
1 réponse
En SQL pur tu ne peux faire ce genre de truc propement.L'idéal est d'utiliser un langage procédurale, ex sous Oracle PL/SQL.
Bon si t'a pas le choix y'a une bidouille:
1. Cree une table temporaire tmp contenant les lignes à insérer
2. Fait l'insert avec comme clause where une sous requête faisant la jointure entre ta table tmp et ta table modèle max disque:
INSERT VALUES(...) INTO disque
WHERE ( clés) IN SELECT ( clés )
FROM modele_max_disque , tmp
WHERE modele_max_disque.disque_position > tmp.champ disque_position ;
Bon si t'a pas le choix y'a une bidouille:
1. Cree une table temporaire tmp contenant les lignes à insérer
2. Fait l'insert avec comme clause where une sous requête faisant la jointure entre ta table tmp et ta table modèle max disque:
INSERT VALUES(...) INTO disque
WHERE ( clés) IN SELECT ( clés )
FROM modele_max_disque , tmp
WHERE modele_max_disque.disque_position > tmp.champ disque_position ;