Bonjour,
J'essaie de comprendre une astuce permettant l'insertion uniquement si la clé primaire est absente (afin de ne pas déclencher l'inévitable erreur de clé dupliquée).
Dans l'exemple donné sur ce post, il est bien précisé de faire le "WHERE NOT EXISTS" sur une table bidon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT INTO
    matable
    (   maclefprimaire
    ,   maclefetrangere
    ,   monattribut
    ) 
SELECT  1
    ,   1
    ,   'valeurtexte'
FROM    tablebidon
WHERE   NOT EXISTS
        (   SELECT  0
            FROM    matable
            WHERE   maclefprimaire = 1
        )
;
Effectivement, si on utilise matable au lieu de tablebidon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT INTO
    matable
    (   maclefprimaire
    ,   maclefetrangere
    ,   monattribut
    ) 
SELECT  1
    ,   1
    ,   'valeurtexte'
FROM    matable
WHERE   NOT EXISTS
        (   SELECT  0
            FROM    matable
            WHERE   maclefprimaire = 1
        )
;
... on obtient une erreur de clé dupliquée si la clé en question n'est pas présente (par contre, cela fonctionne bien si la clé est présente).

Pourquoi ?