En tu ejemplo:
Código sql:
Ver originalSELECT * FROM claves WHERE ncomercial = '"& empresa1 &"'
Si el contenido de empresa1 es "juan & pepe", el resultado final sería:
Código sql:
Ver originalSELECT * FROM claves WHERE ncomercial = 'juan & pepe';
Con lo que lo que estás buscando es una empresa que
se llame "juan & pepe". Si lo que quieres es que te devuelva es aquellos cuyos nombres de empresa
contengan "juan" y "pepe", debes emplear expresiones regulares como
LIKE, y separar ambos componentes (en este momento componen un sólo objeto):
Código sql:
Ver originalSELECT *
FROM claves
WHERE
ncomercial LIKE '%juan%' AND ncomercial LIKE '%pepe%';
Si quieres que busque uno u otro, hay que cambiar AND por OR:
Código sql:
Ver originalSELECT *
FROM claves
WHERE
ncomercial LIKE '%juan%' OR ncomercial LIKE '%pepe%';
Uno de tus problemas es que, igual que en cualquier lenguaje de programación, cuando tienes que comparar dos valores con una misma variable, debes comparar cada uno con ella, no ponerlos en bloque.
En SQL, existe una forma de comparar un campo con un conjunto de valores listados, pero no es aplicable a este modelo, porque no opera con LIKE. Se trata de
IN ANY(subconsulta).