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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 *************************
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
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 *************************
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
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 *************************
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
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
On Thu, 03 Jan 2008 19:15:54 +0100, Fred BROUARD
<brouardf@club-internet.fr> 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
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
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
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