Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

178
Vistas
Las tablas de combinación de consultas MySQL de CI y la instrucción where no devuelven todas las filas

Tengo 3 tablas a las que quiero unirme, sin embargo, cuando uso la declaración where en la tercera tabla, y la tercera tabla no la tiene, no devuelve la fila de la primera y la segunda tabla aunque estoy usando la izquierda unirse.

 Table 1 +---------+--------------+----------+ | acc_PID | acc_name | acc_type | +---------+--------------+----------+ | 1 | Account 1 | 1 | | 2 | Account 2 | 1 | | 3 | Account 3 | 2 | | 4 | Account 4 | 1 | +---------+--------------+----------+ Table 2 +-------------+-----------------+-----------+ | journal_PID | journal_account | trans_PID | +-------------+-----------------+-----------+ | 1 | 1 | 1 | | 2 | 2 | 2 | | 3 | 1 | 3 | +-------------+-----------------+-----------+ Table 3 +-----------+----------------+ | trans_PID | trans_location | +-----------+----------------+ | 1 | 1 | | 2 | 1 | | 3 | 2 | +-----------+----------------+ // CI query $this->db->join('table_2 b', 'a.acc_PID = b.journal_account', 'LEFT'); $this->db->join('table_3 c', 'b.trans_PID = c.trans_PID', 'LEFT'); $this->db->where('a.acc_type', '1'); $this->db->where('c.trans_location', '1'); $this->db->group_by('a.acc_PID'); $query = $this->db->get('table_1 a'); $result = $query->result();

Ahora, a partir de los datos anteriores, si uso ($this->db->where('c.trans_location', '1')), el resultado no devolverá la Cuenta 4 ya que no hay datos de acc_PID ='4' en table_2 y table_3, sin embargo, quiero que el resultado devuelva la Cuenta 4 también aunque no haya datos de la cuenta 4 en la tabla 2 y la tabla 3, sin $this->db->where('c.trans_ubicación', '1' ), el resultado también muestra la cuenta 4, sin embargo, con la instrucción de ubicación where no devuelve la fila de la tabla 1 a pesar de que usé la combinación izquierda, ¿no debería devolver el resultado de la tabla 1 también?

Gracias de antemano.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Intente agregar una condición en Join en lugar de en la cláusula where. Si escribe una condición en la cláusula where, agregará una condición después de que la unión signifique filtro tras filtro,

O no use la combinación izquierda y agregue la condición where al final.

Una cosa más: no encontré ninguna relación de la tabla 1 con la tabla 2 o la tabla 3. Si journal_account está relacionado con la tabla 1, entonces debería funcionar.

Lo intento yo mismo, esta es la solución, creo:

 SELECT * FROM `table1` INNER JOIN table2 ON table2.journal_account = table1.acc_PID INNER JOIN table3 ON table3.trans_PID = table2.trans_PID WHERE table1.acc_type = 1 AND table3.trans_location = 1 GROUP BY table1.acc_PID

Y esto también:

 SELECT * FROM `table1` INNER JOIN table2 ON table2.journal_account = table1.acc_PID INNER JOIN table3 ON table3.trans_PID = table2.trans_PID AND table3.trans_location = 1 WHERE table1.acc_type = 1 GROUP BY table1.acc_PID

Esto me dará dos Cuenta Cuenta 1 y Cuenta 2

Espero que esto te ayudará.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda