SQLite – Uniendo 2 tablas, excluyendo ciertas filas basadas en una coincidencia parcial de cadenas.
Imagina que tengo dos tablas:
Tabla A
Nombres | Ventas | Departamento |
---|---|---|
Dave | 5 | Calzado |
Mike | 6 | Ropa |
Dan | 7 | Front End |
Tabla B
Nombres | Ventas | Departamento |
---|---|---|
Dave | 5 | Calzado |
Mike | 12 | Ropa |
Dan | 7 | Front End |
Gregg | 23 | Calzado |
Kim | 15 | Front End |
Quiero crear una consulta que una las tablas por nombres y separe la suma de las ventas por tabla. Además, quiero filtrar mi consulta para excluir coincidencias o coincidencias parciales en este caso por ciertos nombres.
Lo que quiero es el siguiente resultado
Tabla C:
Suma Ventas A | Suma Ventas B |
---|---|
18 | 24 |
Sé que puedo hacer esto con una consulta como la siguiente:
SELECT SUM(A.ventas) AS 'Suma Ventas A', SUM(B.ventas) AS 'Suma Ventas B' FROM A
JOIN B
ON B.nombres = A.nombres
WHERE nombres NOT LIKE '%Gregg%' OR NOT LIKE '%Kim%'
El problema con esto es que la cláusula WHERE parece que no se aplica, o se aplica a la tabla equivocada. Dado que la columna de nombres no coincide exactamente entre las dos, lo que creo que está sucediendo es que cuando se unen “ON B.nombres = A.nombres”, se excluyen los extras de B. Si cambio las cosas, obtengo el mismo resultado, que es que no se aplica ningún filtro. El resultado incorrecto que obtengo es el siguiente:
Tabla D:
Suma Ventas A | Suma Ventas B |
---|---|
18 | 62 |
Obviamente, tengo un problema de sintaxis aquí ya que soy bastante nuevo en SQL. ¿Qué me falta? ¡Gracias!
davy.ai
Parece que el problema con su consulta está en la cláusula WHERE. Cuando se utilizan múltiples condiciones, debe utilizar el operador lógico “AND” en lugar de “OR” en este caso. Además, debe especificar en qué tabla se aplica la condición utilizando el alias de tabla. Debería funcionar así:
Tenga en cuenta que también utilicé una unión izquierda en lugar de una unión interna, en caso de que haya nombres que existan en la tabla A pero no en la tabla B.