Ces requètes ne marchent plus
* Bonjour, *
J'ai fait évoluer les requêtes java à la suite du rajout du champ siIdPos dans la base de donnée sur la table T_WORD et les requêtes de lecture ne marchent plus avec ou sans le champ SiIdPos, les mots ne sont plus renseignés.
Je donne les deux requêtes avec SiIdPos et sans: Dans les deux cas les champs contenant les mots et tout ce qui est dans la table T_WORD n'est pas renseigné. Pourquoi?
Ci-après la requête avec SiIdPos:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
SELECT
ES.nuIdElemn,
ES.nuIdTypeElement,
ES.nuIdOccurence,
ES.wsText,
ES.vcName,
ES.nuidpar,
ES.siNbChunk,
ES.siIdD,
EC.nuIdChunk,
C.nuIdChunkType,
C.siNbWord,
C.nuIdDrivingPos,
W.vcString,
W.siIdPOS,
L.cExcluded,
L.siIdPOS
FROM T_ELEMENT_SEMANTIQUE ES
LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn
LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk
LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk
LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord
LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma AND W.siIdPOS = L.siIdPOS
WHERE
ES.siIdD = 1
ORDER BY ES.nuIdOccurence DESC, ES.vcName, ES.nuIdElemn, EC.siChkRank, CW.siWordRank |
et maintenant la requète sans SiIdPos
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
SELECT
ES.nuIdElemn,
ES.nuIdTypeElement,
ES.nuIdOccurence,
ES.wsText,
ES.vcName,
ES.nuidpar,
ES.siNbChunk,
ES.siIdD,
EC.nuIdChunk,
C.nuIdChunkType,
C.siNbWord,
C.nuIdDrivingPos,
W.vcString,
L.cExcluded,
L.siIdPOS
FROM T_ELEMENT_SEMANTIQUE ES
LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn
LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk
LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk
LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord
LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma
WHERE
ES.siIdD = 1
ORDER BY ES.nuIdOccurence DESC, ES.vcName, ES.nuIdElemn, EC.siChkRank, CW.siWordRank |
et maintenant la requête tirée d'une sauvegarde qui marchait
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
"SELECT "
+ "ES.nuIdElemn, "
+ "ES.nuIdTypeElement, "
+ "ES.nuIdOccurence, "
+ "ES.wsText, "
+ "ES.vcName, "
+ "ES.siNbChunk, "
+ "ES.siIdD, "
+ "EC.nuIdChunk, "
+ "C.nuIdChunkType, "
+ "C.siNbWord, "
+ "C.nuIdDrivingPos, "
+ "W.vcString, "
+ "L.cExcluded, "
+ "L.siIdPOS"
+ " FROM"
+ " T_ELEMENT_SEMANTIQUE ES"
+ " LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn"
+ " LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk"
+ " LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk"
+ " LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord"
+ " LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma"
+ " WHERE"
+ " ES.siIdD = " + iIdDoc
+ " ORDER BY"
+ " ES.vcName,"
+ " ES.nuIdOccurence DESC,"
+ " ES.nuIdElemn,"
+ " EC.siChkRank,"
+ " CW.siWordRank"; |
et cette requête ne passe pas l’interpréteur sql et s’arrête sur le champ C.nuIdChunkType
alors que celle ci est exécutée par l'interpréteur sans donner les résultats en mots
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
SELECT
ES.nuIdElemn,
ES.nuIdTypeElement,
ES.nuIdOccurence,
ES.wsText,
ES.vcName,
ES.siNbChunk,
ES.siIdD,
EC.nuIdChunk,
C.nuIdChunkType,
C.siNbWord,
C.nuIdDrivingPos,
W.vcString,
L.cExcluded,
L.siIdPOS
FROM T_ELEMENT_SEMANTIQUE ES
LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn
LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk
LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk
LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord
LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma
WHERE ES.siIdD = 1
ORDER BY ES.nuIdOccurence DESC, ES.vcName, ES.nuIdElemn, EC.siChkRank, CW.siWordRank |
A noter que les trois dernières requêtes, a une quote près sont les mêmes.
Comment faire marcher ces requêtes? Il semble que l'introduction du champ siIdPos dans la base de données ait changé le comportement du système
* Merci *
il faut que toutes les tables soient remplies
bonjour
En contrôlant ma base de donnée j'ai constaté qu'une table était vide: Dans les allers et retours pour avoir un siIdPos la structure de la base de donnée avait changée et un insert était sur l'ancienne structure
De fait il y avait une condition mal exprimée et inutile dans la requête: la requête qui convient est comme suit:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
SELECT
ES.nuIdElemn,
ES.nuIdTypeElement,
ES.nuIdOccurence,
ES.wsText,
ES.vcName,
ES.nuidpar,
ES.siNbChunk,
ES.siIdD,
EC.nuIdChunk,
C.nuIdChunkType,
C.siNbWord,
C.nuIdDrivingPos,
W.nuIdWord,
W.vcString,
W.siIdPOS,
L.cExcluded,
L.siIdPOS
FROM
T_ELEMENT_SEMANTIQUE ES
LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn
LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk
LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk
LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord
LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma AND W.siIdPOS = L.siIdPOS
WHERE ES.siIdD = 1
ORDER BY ES.nuIdOccurence DESC, ES.vcName, ES.nuIdElemn, EC.siChkRank, CW.siWordRank |
en commentaire, il a fallu rajouter une contrainte de jointure sur SiIdPos, mais il n'y avait pas à rajouter de jointure sur les identifiants qui était bien exprimée par l'identifiant nuIdLemma T_LEMMA ne connait pas nuIdWord.