Necesito escribir un analizador lógico booleano que traduzca el lenguaje lógico booleano a una cláusula SQL WHERE.¿Cómo analizo la lógica booleana?
El orden de los operandos siempre estará en el orden correcto (con valor a la derecha).
Aquí hay un ejemplo relativamente simple. Podría haber paréntesis anidados y el uso de NOT, etc.
(CACOUNT=01 OR CACOUNT=02 OR CACOUNT=03)
AND Q4=1 AND NAME=TIMOTHY
Aquí es lo que la cláusula WHERE se parecería.
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'
)
¿Esto no puede simplemente entrar en una cláusula 'WHERE' tal cual? – tzaman
No, realmente no puede en absoluto. No hay una columna llamada CACOUNT. Es una mesa vertical. –
¿qué es la tabla vertical? – Andrey