Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!