Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos dias, estoy realizando un trabajo para mi empresa. La cosa es que obtengo datos de una base de datos Oracle, cargo datos de 2 tablas AP_SUPPLIERS y AP_SUPPLIERS_SITES_ALL, de estas tabalas necesito trae ciertos campos y a su vez de esos campos solo aquellos que cumplan con sierta condicion: SHIP_TO_LOCATION_ID = '70312'. Lo que tengo armado hasta ahora es esto:
Tabla1:
LOAD
VENDOR_ID,
SEGMENT1,
VENDOR_NAME;
SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;
Tabla2:
LOAD
VENDOR_ID,
VENDOR_SITE_CODE,
SHIP_TO_LOCATION_ID,
CITY,
ZIP,
PROVINCE,
COUNTRY;
SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL
where SHIP_TO_LOCATION_ID = '70312'
El problema esta que si bien me trae los datos filtrados... me trae ademas todos los datos de la Tabla1 (AP_SUPPLIERS) y yo solo quiero que traiga de estas 2 tablas los datos donde SHIP_TO_LOCATION_ID sea igual a 70312.
Soy nuevo en esta herramienta y muchas cosas se me escapan, no se si alguno podria darme una mano para orientarme en como resolver este problema.
Juan Manuel, puedes probar el join de esta forma para la tabla1, asumiendo que los campos por los que puedo relacionar ambas tablas es el VENDOR_ID:
Tabla1:
LOAD
VENDOR_ID,
SEGMENT1,
VENDOR_NAME;
SELECT AP_SUPPLIERS.VENDOR_ID,
AP_SUPPLIERS.SEGMENT1,
AP_SUPPLIERS.VENDOR_NAME
from AP_SUPPLIERS, AP_SUPPLIER_SITES_ALL
where AP_SUPPLIERS.VENDOR_ID = AP_SUPPLIER_SITES_ALL.VENDOR_ID
AND AP_SUPPLIER_SITES_ALL.SHIP_TO_LOCATION_ID = '70312';
La tabla2 se cargaría exactamente como lo estabas haciendo.
Buen día Juan Manuel,
A la tabla1 no le estás condicionando nada, por eso te trae todos los datos. Si en esta tabla no puedes usar la misma condicion que en la tabla2 (where SHIP_TO_LOCATION_ID = '70312') dado que no exista el campo, yo haría un JOIN entre ambas tablas para poder hacer el filtrado primero y luego cargarla.
Espero sirva.
Saludos.
Julian, ahi estuve viendo como hacer el JOIN pero no puedo encontrarle la vuelta. Mire ejemplos y guias de como armarlo pero no me sale con mi estructura de datos. Podrias darme una mano con eso? masomenos como seria el JOIN con estas 2 tablas.
Hay varias formas de hacer eso, la que me parece más sencilla es que hagas una unión de la tabla 1 con la tabla 2 usando left join(tabla2) para que solamente tome los VENDOR_ID ya filtrados en el where:
Tabla2:
LOAD
VENDOR_ID,
VENDOR_SITE_CODE,
SHIP_TO_LOCATION_ID,
CITY,
ZIP,
PROVINCE,
COUNTRY;
SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL
where SHIP_TO_LOCATION_ID = '70312'
Left Join(Tabla2)
LOAD
VENDOR_ID,
SEGMENT1,
VENDOR_NAME;
SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;
Saludos,
Jose
Juan Manuel, puedes probar el join de esta forma para la tabla1, asumiendo que los campos por los que puedo relacionar ambas tablas es el VENDOR_ID:
Tabla1:
LOAD
VENDOR_ID,
SEGMENT1,
VENDOR_NAME;
SELECT AP_SUPPLIERS.VENDOR_ID,
AP_SUPPLIERS.SEGMENT1,
AP_SUPPLIERS.VENDOR_NAME
from AP_SUPPLIERS, AP_SUPPLIER_SITES_ALL
where AP_SUPPLIERS.VENDOR_ID = AP_SUPPLIER_SITES_ALL.VENDOR_ID
AND AP_SUPPLIER_SITES_ALL.SHIP_TO_LOCATION_ID = '70312';
La tabla2 se cargaría exactamente como lo estabas haciendo.
Prueba asi:
Tabla2:
LOAD
VENDOR_ID,
VENDOR_ID as VENDOR_ID_TEMP,
VENDOR_SITE_CODE,
SHIP_TO_LOCATION_ID,
CITY,
ZIP,
PROVINCE,
COUNTRY;
SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL
where SHIP_TO_LOCATION_ID = '70312'
Tabla1_Temp:
LOAD
VENDOR_ID,
SEGMENT1,
VENDOR_NAME;
SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;
Tabla1:
NOCONCATENATE
LOAD * RESIDENT Tabla1_Temp
WHERE EXISTS (VENDOR_ID_TEMP, VENDOR_ID);
DROP TABLE Tabla1_Temp;
DROP FIELD VENDOR_ID_TEMP;