J'ai besoin d'écrire un analyseur logique booléen qui traduira le langage logique booléen en une clause SQL WHERE.Comment analyser la logique booléenne?
L'ordre des opérandes sera toujours dans le bon ordre (avec la valeur sur la droite).
Voici un exemple relativement simple. Il pourrait y avoir des parenthèses imbriquées et l'utilisation de NOT, etc.
(CACOUNT=01 OR CACOUNT=02 OR CACOUNT=03)
AND Q4=1 AND NAME=TIMOTHY
Voici ce que la clause WHERE ressemblerait.
WHERE (
EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='01'
)
OR EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='02'
)
OR EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='03'
)
)
AND EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='Q4' AND b.Value='1'
)
AND EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='NAME' AND b.Value='TIMOTHY'
)
Ca ne peut pas simplement aller dans une clause 'WHERE' tel quel? – tzaman
Non, il ne peut vraiment pas du tout. Il n'y a pas de colonne nommée CACOUNT. C'est une table verticale. –
Qu'est-ce qu'une table verticale? – Andrey