Bloqué par une requete SQL

Bloqué par une requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 10-09-2008 à 15:34:52    

Bonjour,
J'ai 2 table:
----LICENCE-----
      licence_id
      licence_status
      ....
 
 
----INSTALLATION---
        install_id
        install_id_licence
        install_Pc
       ....
 
La table Licence regroupe toutes les licences connu
la table INSTALLATION regroupe les installation des licence sur les PC.
 
 
Je voudrais faire une une requête pour que:
si l'ID d'une licence n'est pas installé sur un PC que son stratut passe en "libre"  
si l'ID d'une licence est installé sur un Pc que son statut pas en "Utilisé".
 
Merci


Message édité par Kestouf le 10-09-2008 à 15:35:42
Reply

Marsh Posté le 10-09-2008 à 15:34:52   

Reply

Marsh Posté le 10-09-2008 à 15:46:17    

quel sgbd ?
 
il faudra faire un truc du genre (syntaxe pouvant évoluer d'un sgbd à l'autre, ici, Oracle) :
 
update licence
set license_status = decode((select count(*) from installation where install_id_licence = license_id), 0, 'Libre', 'Utilisé');


Message édité par MagicBuzz le 10-09-2008 à 15:46:47
Reply

Marsh Posté le 10-09-2008 à 15:59:07    

MySql

Reply

Marsh Posté le 10-09-2008 à 16:03:47    

J'ai une erreur.

Citation :

Erreur
 
requête SQL: Documentation
 
UPDATE baroque_licences SET licence_status = decode( (
SELECT count( * )
FROM baroque_install
WHERE install_id_licence = licence_id ) , 0, 'Libre', 'Utilisé'
)
 
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0, 'Libre', 'Utilisé')' at line 2


 
 
Pour le poste j'ai simplifié les tables: la table INSTALLATION a pour vrais nom 'baroque_install' et LICENCE 'baroque_licences'


Message édité par Kestouf le 10-09-2008 à 16:05:03
Reply

Marsh Posté le 10-09-2008 à 16:08:55    

normal, dans mysql DECODE n'a pas du tout la même signification.
 
il faut utiliser case (select ...) when 1 then 'Libre' else 'Utlisé' end

Reply

Marsh Posté le 11-09-2008 à 08:09:12    

J'ai essayé, mais ne connaissant pas du tout la fonction CASE, je pense que a syntax n'est pas bon:
 
UPDATE baroque_licences SET licence_status = case(
SELECT count( * )
FROM baroque_install
WHERE install_id_licence = licence_id )when 1 then 'Libre' else 'Utilisé'

Reply

Marsh Posté le 11-09-2008 à 09:06:19    

pour moi elle me semble bonne. à vérifier avec quelqu'un qui a mysql, moi j'ai pas ce sgbd

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed