es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Une 4 tablas con unión interna en PostgreSQL (error: el operador no existe: integer = character)

Tengo dificultades para hacer una unión interna de 4 tablas para determinar la región de un almacén basado en el id del almacén. Estoy casi seguro de que mi lógica es correcta, pero obtengo un error de operador al ejecutar el código (error de operador que no existe: entero = carácter).

El problema es que el t1.locationid es un número entero mientras que el t3.countryid es un carácter (por ejemplo, ‘US’). Para su información, todas las demás columnas de id son números enteros. ¿Alguien tiene alguna sugerencia? ¡Gracias de antemano!

Aquí está mi consulta:


SELECT warehouse_name
FROM warehouses t1
INNER JOIN locations t2
ON t1.location_id = t2.location_id
INNER JOIN countries t3
ON t2.country_id = t3.country_id
INNER JOIN regions t4
ON t3.region_id = t4.region_id
WHERE t4.region_id = 3;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para unir internamente 4 tablas para determinar la región de un almacén

    El problema con la consulta proporcionada es que los tipos de datos de las columnas que se comparan en las condiciones de unión son diferentes. Específicamente, la columna t1.location_id es un entero mientras que la columna t3.country_id es un carácter o varchar.

    Para solucionar este problema, necesitamos convertir la columna varchar t3.country_id en un entero utilizando la función de conversión apropiada.

    Aquí hay una consulta actualizada con la conversión necesaria:

    SELECT
      warehouse_name
    FROM
      warehouses t1
      INNER JOIN locations t2 ON t1.location_id = t2.location_id
      INNER JOIN countries t3 ON CAST(t2.country_id AS INTEGER) = t3.country_id
      INNER JOIN regions t4 ON t3.region_id = t4.region_id
    WHERE
      t4.region_id = 3;
    

    Para convertir la columna varchar t3.country_id en un entero, usamos la función CAST. En este caso, estamos convirtiendo t3.country_id en un entero antes de unirlo con t2.country_id.

    También tenga en cuenta que la condición de unión ha cambiado de t1.location_id = t3.country_id a CAST(t2.country_id AS INTEGER) = t3.country_id, y la unión final es entre t3.region_id y t4.region_id, en lugar de entre t1.location_id y t4.region_id.

    Al hacer estos cambios, la consulta debería ejecutarse sin errores y devolver correctamente los nombres de los almacenes en la región con id 3.

Comments are closed.