Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête UPDATE à définir

2 réponses
Avatar
Michel Romieu
Bonjour et meilleurs vœux à tous,

Soient 3 tables :

DPDecomptes
Id ActDet
3 07365962040000591
4 07365962040000680

DPLignesActes
Id idDecompte
9 NULL
10 NULL
14 NULL
25 NULL

DPOccurrences
Id idLigneActe ArcDet Principal
14 9 07365962040000591 1
15 10 07365962040000591 1
20 14 07365962040000591 1
37 25 07365962040000681 0
38 25 07365962040000680 1
62 9 07334962040000417 0
63 10 07334962040000417 0
66 14 07334962040000417 0

Les champs Id de chaque tables sont des champs compteurs

Le but est de compléter les colonnes idDecompte de la table
DPLignesActes qui ont une valeur NULL pour créer un lien avec la table
DPDecompte.

La logique est la suivante :
Pour chaque ligne de DPLignesActes,
on cherche la ligne correspondante de DPOccurrences
(DPOccurrences.idLigneActe = DPLignesActes.Id et Principal = 1) ; il
ne peut y en avoir qu'une.
DPLignesActes Id : 9, idDecompte : NULL
-> DPOccurrences Id : 14, idLigneActe : 9, ArcDet : 07365962040000591,
Principal : 1
Connaissant ArcDet, on cherche la ligne correspondante de DPDecompte
(DPOccurrences.ArcDet = DPDecomptes.ActDet) ; Là aussi, il ne peut y
en avoir qu'une.
-> DPDecomptes Id : 3, ActDet : 07365962040000591
Il ne reste plus qu'a mettre à jour idDecompte dans DPLignesActes
-> DPLignesActes Id : 9, idDecompte : 3

Comment réaliser cela avec une seule requête UPDATE qui donnera :
DPLignesActes
Id idDecompte
9 3
10 3
14 3
25 1

Merci pour votre aide

Michel

2 réponses

Avatar
Fred BROUARD
CREATE TABLE DPDecomptes (Id int, ActDet CHAR(17))
INSERT INTO DPDecomptes VALUES (3, '07365962040000591')
INSERT INTO DPDecomptes VALUES (4, '07365962040000680')

CREATE TABLE DPLignesActes (Id int, idDecompte int)
INSERT INTO DPLignesActes VALUES (9, NULL)
INSERT INTO DPLignesActes VALUES (10, NULL)
INSERT INTO DPLignesActes VALUES (14, NULL)
INSERT INTO DPLignesActes VALUES (25, NULL)

CREATE TABLE DPOccurrences (Id int, idLigneActe int, ArcDet CHAR(17),
Principal BIT)
INSERT INTO DPOccurrences VALUES (14, 9, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (15, 10, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (20, 14, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (37, 25, '07365962040000681', 0)
INSERT INTO DPOccurrences VALUES (38, 25, '07365962040000680', 1)
INSERT INTO DPOccurrences VALUES (62, 9, '07334962040000417', 0)
INSERT INTO DPOccurrences VALUES (63, 10, '07334962040000417', 0)
INSERT INTO DPOccurrences VALUES (66, 14, '07334962040000417', 0)

UPDATE DPLignesActes
SET idDecompte = DPD.Id
FROM DPLignesActes AS DPL
INNER JOIN DPOccurrences AS DPO
ON DPO.idLigneActe = DPL.Id
INNER JOIN DPDecomptes AS DPD
ON DPO.ArcDet = DPD.ActDet
WHERE Principal = 1

A +

Michel Romieu a écrit :
Bonjour et meilleurs vœux à tous,

Soient 3 tables :

DPDecomptes
Id ActDet
3 07365962040000591
4 07365962040000680

DPLignesActes
Id idDecompte
9 NULL
10 NULL
14 NULL
25 NULL

DPOccurrences
Id idLigneActe ArcDet Principal
14 9 07365962040000591 1
15 10 07365962040000591 1
20 14 07365962040000591 1
37 25 07365962040000681 0
38 25 07365962040000680 1
62 9 07334962040000417 0
63 10 07334962040000417 0
66 14 07334962040000417 0

Les champs Id de chaque tables sont des champs compteurs

Le but est de compléter les colonnes idDecompte de la table
DPLignesActes qui ont une valeur NULL pour créer un lien avec la table
DPDecompte.

La logique est la suivante :
Pour chaque ligne de DPLignesActes,
on cherche la ligne correspondante de DPOccurrences
(DPOccurrences.idLigneActe = DPLignesActes.Id et Principal = 1) ; il
ne peut y en avoir qu'une.
DPLignesActes Id : 9, idDecompte : NULL
-> DPOccurrences Id : 14, idLigneActe : 9, ArcDet : 07365962040000591,
Principal : 1
Connaissant ArcDet, on cherche la ligne correspondante de DPDecompte
(DPOccurrences.ArcDet = DPDecomptes.ActDet) ; Là aussi, il ne peut y
en avoir qu'une.
-> DPDecomptes Id : 3, ActDet : 07365962040000591
Il ne reste plus qu'a mettre à jour idDecompte dans DPLignesActes
-> DPLignesActes Id : 9, idDecompte : 3

Comment réaliser cela avec une seule requête UPDATE qui donnera :
DPLignesActes
Id idDecompte
9 3
10 3
14 3
25 1

Merci pour votre aide

Michel




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
Michel Romieu
On Thu, 03 Jan 2008 19:15:54 +0100, Fred BROUARD
wrote:

Super, Merci beaucoup

Michel

CREATE TABLE DPDecomptes (Id int, ActDet CHAR(17))
INSERT INTO DPDecomptes VALUES (3, '07365962040000591')
INSERT INTO DPDecomptes VALUES (4, '07365962040000680')

CREATE TABLE DPLignesActes (Id int, idDecompte int)
INSERT INTO DPLignesActes VALUES (9, NULL)
INSERT INTO DPLignesActes VALUES (10, NULL)
INSERT INTO DPLignesActes VALUES (14, NULL)
INSERT INTO DPLignesActes VALUES (25, NULL)

CREATE TABLE DPOccurrences (Id int, idLigneActe int, ArcDet CHAR(17),
Principal BIT)
INSERT INTO DPOccurrences VALUES (14, 9, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (15, 10, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (20, 14, '07365962040000591', 1)
INSERT INTO DPOccurrences VALUES (37, 25, '07365962040000681', 0)
INSERT INTO DPOccurrences VALUES (38, 25, '07365962040000680', 1)
INSERT INTO DPOccurrences VALUES (62, 9, '07334962040000417', 0)
INSERT INTO DPOccurrences VALUES (63, 10, '07334962040000417', 0)
INSERT INTO DPOccurrences VALUES (66, 14, '07334962040000417', 0)

UPDATE DPLignesActes
SET idDecompte = DPD.Id
FROM DPLignesActes AS DPL
INNER JOIN DPOccurrences AS DPO
ON DPO.idLigneActe = DPL.Id
INNER JOIN DPDecomptes AS DPD
ON DPO.ArcDet = DPD.ActDet
WHERE Principal = 1

A +

Michel Romieu a écrit :
Bonjour et meilleurs vœux à tous,

Soient 3 tables :

DPDecomptes
Id ActDet
3 07365962040000591
4 07365962040000680

DPLignesActes
Id idDecompte
9 NULL
10 NULL
14 NULL
25 NULL

DPOccurrences
Id idLigneActe ArcDet Principal
14 9 07365962040000591 1
15 10 07365962040000591 1
20 14 07365962040000591 1
37 25 07365962040000681 0
38 25 07365962040000680 1
62 9 07334962040000417 0
63 10 07334962040000417 0
66 14 07334962040000417 0

Les champs Id de chaque tables sont des champs compteurs

Le but est de compléter les colonnes idDecompte de la table
DPLignesActes qui ont une valeur NULL pour créer un lien avec la table
DPDecompte.

La logique est la suivante :
Pour chaque ligne de DPLignesActes,
on cherche la ligne correspondante de DPOccurrences
(DPOccurrences.idLigneActe = DPLignesActes.Id et Principal = 1) ; il
ne peut y en avoir qu'une.
DPLignesActes Id : 9, idDecompte : NULL
-> DPOccurrences Id : 14, idLigneActe : 9, ArcDet : 07365962040000591,
Principal : 1
Connaissant ArcDet, on cherche la ligne correspondante de DPDecompte
(DPOccurrences.ArcDet = DPDecomptes.ActDet) ; Là aussi, il ne peut y
en avoir qu'une.
-> DPDecomptes Id : 3, ActDet : 07365962040000591
Il ne reste plus qu'a mettre à jour idDecompte dans DPLignesActes
-> DPLignesActes Id : 9, idDecompte : 3

Comment réaliser cela avec une seule requête UPDATE qui donnera :
DPLignesActes
Id idDecompte
9 3
10 3
14 3
25 1

Merci pour votre aide

Michel