Je souhaite faire une demande de bascule telle que définie ici T-SQL: Utilisation d'un CASE dans une instruction UPDATE pour mettre à jour certaines colonnes en fonction d'une condition
J'ai fait ça :
Update capteur
join smartparking_reference on(smartparking_reference.id_capteur = capteur.id_capteur)
set (CASE WHEN capteur.valeur != 0 then capteur.valeur = 0 and last_value_date = now() END)
where smartparking_reference.id_ref = 3;
Mais toujours une erreur de syntaxe. Et alors ... qu'est-ce que j'ai loupé ?
3 réponses
UPDATE capteur
SET capteur.valeur=(
CASE
WHEN capteur.valeur != 0 THEN
0 ELSE 'another value'
END
),last_value_date = now ()
FROM capteur
INNER JOIN smartparking_reference ON
smartparking_reference.id_capteur = capteur.id_capteur
WHERE
smartparking_reference.id_ref = 3;
Apparemment, vous voulez mettre à jour capteur.valeur
uniquement quand il est différent de zéro et le mettre à zéro. Essayez cette déclaration plus simple:
Style MySql
Update capteur
join smartparking_reference on(smartparking_reference.id_capteur = capteur.id_capteur)
set valeur = case when valeur = 0 then 1 else 0 end, last_value_date = now()
where smartparking_reference.id_ref = 3;
Style de serveur SQL
Update capteur
set valeur = case when valeur = 0 then 1 else 0 end, last_value_date = getdate()
from smartparking_reference
where smartparking_reference.id_capteur = capteur.id_capteur
and smartparking_reference.id_ref = 3;
Je suppose également que votre déclaration de mise à jour a la mauvaise syntaxe
UPDATE c
SET valeur = 0, last_value_date = now()
FROM capteur c
INNER JOIN smartparking_reference AS sr ON
sr.id_capteur = c.id_capteur
WHERE sr.id_ref = 3 and c.valeur != 0
De nouvelles questions
sql
Le langage de requête structuré (SQL) est un langage permettant d'interroger des bases de données. Les questions doivent inclure des exemples de code, une structure de table, des exemples de données et une balise pour l'implémentation du SGBD (par exemple MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) utilisés. Si votre question concerne uniquement un SGBD spécifique (utilise des extensions / fonctionnalités spécifiques), utilisez plutôt la balise de ce SGBD. Les réponses aux questions marquées avec SQL doivent utiliser le standard SQL ISO / IEC.