In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

SQL databases
Responder
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

Tengo que sacar datos de un SQLServer, y me conecto con ADO
perfectamente y puedo hacer consultas básicas normalmente.
Tengo que importar datos de una tabla de facturas, que tiene claves de
otras tablas como el proveedor, banco, forma de pago.
1) Como los datos estan un poco 'bastardeados', a veces no se cumplen
las reglas ordinarias de integridad, como por ejemplo puedo encontrar
facturas cuyo codigo de proveedor no existe en la tabla de proveedores,
por lo que en las consultas uso SELETS con LEFT OUTER JOIN.
Para relacionar las 2 primeras tablas hago
SELECT T1.*, T2.* FROM DDBB.FACTURAS as T1 LEFT OUTER JOIN DDBB.PROVEED
as T2
en realidad es mas compleja por los nombres de los campos y tablas pero
en definitiva es esto.
La pregunta es ¿Como se hace para hacer los 3 joins a la vez? La unica
forma que se me ocurre es anidándo los selects, pero en una de esas hay
otra más directa.
2) Como es la sintaxis de las constantes de tipo fecha para usarlas en
el WHERE? algo asi como FechaFact > CtoD( '31/01/08' )
Carlos
Claudio Morinico
Mensajes: 9
Registrado: Mar Oct 12, 2004 2:25 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Claudio Morinico »

Hola Carlos,
Te respondo todo en un simple ejemplo:
SELECT T1.*, T2.*
FROM (DDBB.FACTURAS AS T1
LEFT JOIN DDBB.PROVEED AS T2
ON T1.id = T2.id)
LEFT JOIN DDBB.OTRATABLA AS T3
ON T1.OtraId = T3.id
WHERE T1.Fecha > #2007-12-31 23:59:59#
Saludos.
--
Claudio Morinico,
Montevideo - Uruguay.
El dia Wed, 20 Feb 2008 09:46:42 +0100, Carlos Mora
(carlos.mora@atisa.es) dijo...
> Tengo que sacar datos de un SQLServer, y me conecto con ADO
> perfectamente y puedo hacer consultas básicas normalmente.
>
> Tengo que importar datos de una tabla de facturas, que tiene claves de
> otras tablas como el proveedor, banco, forma de pago.
>
> 1) Como los datos estan un poco 'bastardeados', a veces no se cumplen
> las reglas ordinarias de integridad, como por ejemplo puedo encontrar
> facturas cuyo codigo de proveedor no existe en la tabla de proveedores,
> por lo que en las consultas uso SELETS con LEFT OUTER JOIN.
>
> Para relacionar las 2 primeras tablas hago
>
> SELECT T1.*, T2.* FROM DDBB.FACTURAS as T1 LEFT OUTER JOIN DDBB.PROVEED
> as T2
>
> en realidad es mas compleja por los nombres de los campos y tablas pero
> en definitiva es esto.
>
> La pregunta es ¿Como se hace para hacer los 3 joins a la vez? La unica
> forma que se me ocurre es anidándo los selects, pero en una de esas hay
> otra más directa.
>
> 2) Como es la sintaxis de las constantes de tipo fecha para usarlas en
> el WHERE? algo asi como FechaFact > CtoD( '31/01/08' )
>
> Carlos
>
>
Claudio Morinico
Mensajes: 9
Registrado: Mar Oct 12, 2004 2:25 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Claudio Morinico »

El dia Wed, 20 Feb 2008 10:19:47 -0200, Claudio Morinico
(morinico@adinet.com.uy) dijo...
>
> Hola Carlos,
>
> Te respondo todo en un simple ejemplo:
>
> SELECT T1.*, T2.*
> FROM (DDBB.FACTURAS AS T1
> LEFT JOIN DDBB.PROVEED AS T2
> ON T1.id = T2.id)
> LEFT JOIN DDBB.OTRATABLA AS T3
> ON T1.OtraId = T3.id
> WHERE T1.Fecha > #2007-12-31 23:59:59#
>
> Saludos.
>
>
Debes tener en cuenta que si tienes campos con el mismo nombre en las
diferentes tablas, debes seleccionar los campos y utilizar "AS" para
renombrarlos.
Tambien me falto seleccionar T3.* en el ejemplo, pero me parece que es
mucho mejor seleccionar los campos que realmente vas a utilizar, asi es
mas rapida la consulta y evitas problemas.
--
Claudio Morinico,
Montevideo - Uruguay.
Claudio Morinico
Mensajes: 9
Registrado: Mar Oct 12, 2004 2:25 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Claudio Morinico »

El dia Wed, 20 Feb 2008 10:19:47 -0200, Claudio Morinico
(morinico@adinet.com.uy) dijo...
>
> Hola Carlos,
>
> Te respondo todo en un simple ejemplo:
>
> SELECT T1.*, T2.*
> FROM (DDBB.FACTURAS AS T1
> LEFT JOIN DDBB.PROVEED AS T2
> ON T1.id = T2.id)
> LEFT JOIN DDBB.OTRATABLA AS T3
> ON T1.OtraId = T3.id
> WHERE T1.Fecha > #2007-12-31 23:59:59#
>
> Saludos.
>
>
Otro ejemplo en el cual T3 depende de la tabla de proveedores en lugar
de la tabla de facturas:
SELECT T1.*, T2.*, T3.*
FROM (DDBB.FACTURAS AS T1
LEFT JOIN DDBB.PROVEED AS T2
ON T1.id = T2.id)
LEFT JOIN DDBB.OTRATABLA AS T3
ON T2.OtraId = T3.id
WHERE T1.Fecha > #2007-12-31 23:59:59#
Asi puedes encadenar datos de varias tablas.
--
Claudio Morinico,
Montevideo - Uruguay.
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

Hola Claudio,
> Te respondo todo en un simple ejemplo:
>
> SELECT T1.*, T2.*
> FROM (DDBB.FACTURAS AS T1
> LEFT JOIN DDBB.PROVEED AS T2
> ON T1.id = T2.id)
> LEFT JOIN DDBB.OTRATABLA AS T3
> ON T1.OtraId = T3.id
> WHERE T1.Fecha > #2007-12-31 23:59:59#
Efectivamente es como lo hací­a, anidando los selects, y tambien renombro
las columnas con AS, lo que pasa es que son tablas con muchos campos, y
ademas son 4 tablas ( 1 con claves de las otras tres ) y me da pereza
escribir, pero por lo visto con SQL hay que escribir.
Habí­a logrado poner las fechas usando comillas simples como en
T1.Fecha > '15/01/2008'
y me funcionó bien, pero voy a probar con el # a ver que pasa.
Gracias por la ayuda,
Carlos.
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

Hola Claudio,
> y me funcionó bien, pero voy a probar con el # a ver que pasa.
Con la fecha entre ## me da error, pero con comillas simples me funciona
bien. Será que solo estoy poniendo una fecha y no un datetime?
Un saludo,
Carlos.
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por jose.luis »

Carlos,
SELECT A.*, B.*, C.* FROM
TABLA1 A
LEFT JOIN TABLA2 B ON A.campo1 = B.campo2
LEFT JOIN TABLA3 C ON A.campoX = C.CampoX
WHERE A.Fecha > '12-06-2005 10:00:00'
Ten en cuenta que si vas a usar el resultado en un recordset de ADO deberás
forzosamente utilizar alias en las columnas que tengan el mismo nombre en
las diferentes tablas. Por ejemplo:
SELECT A.micampo1 AS CAMPO1, B.micampo1 AS CAMPO2, ....
Yo suelo utilizar el administrador corporativo (o el nuevo SqlServer
Management Studio) para probar los selects.
Saludos,
José Luis Capel
"Carlos Mora" <carlos.mora@atisa.es> escribió en el mensaje
news:[email=47bbe8f2@ozsrv2.ozlan.local...]47bbe8f2@ozsrv2.ozlan.local...[/email]
Tengo que sacar datos de un SQLServer, y me conecto con ADO
perfectamente y puedo hacer consultas básicas normalmente.
Tengo que importar datos de una tabla de facturas, que tiene claves de
otras tablas como el proveedor, banco, forma de pago.
1) Como los datos estan un poco 'bastardeados', a veces no se cumplen
las reglas ordinarias de integridad, como por ejemplo puedo encontrar
facturas cuyo codigo de proveedor no existe en la tabla de proveedores,
por lo que en las consultas uso SELETS con LEFT OUTER JOIN.
Para relacionar las 2 primeras tablas hago
SELECT T1.*, T2.* FROM DDBB.FACTURAS as T1 LEFT OUTER JOIN DDBB.PROVEED
as T2
en realidad es mas compleja por los nombres de los campos y tablas pero
en definitiva es esto.
La pregunta es ¿Como se hace para hacer los 3 joins a la vez? La unica
forma que se me ocurre es anidándo los selects, pero en una de esas hay
otra más directa.
2) Como es la sintaxis de las constantes de tipo fecha para usarlas en
el WHERE? algo asi como FechaFact > CtoD( '31/01/08' )
Carlos
Claudio Morinico
Mensajes: 9
Registrado: Mar Oct 12, 2004 2:25 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Claudio Morinico »

El dia Wed, 20 Feb 2008 13:54:54 +0100, Carlos Mora
(carlos.mora@atisa.es) dijo...
> Hola Claudio,
>
> > y me funcionó bien, pero voy a probar con el # a ver que pasa.
>
> Con la fecha entre ## me da error, pero con comillas simples me funciona
> bien. Será que solo estoy poniendo una fecha y no un datetime?
>
> Un saludo,
>
> Carlos.
>
Perdon por la confusión con el #. Yo utilizo Access y funciona con #.
Pense que en SQL Server serí­a igual, ya que son los dos productos de
Microsoft.
Yo utilizo MySQL o Postgres como servidores y tambien es con comillas
simples.
Saludos,
--
Claudio Morinico,
Montevideo - Uruguay.
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

José Luis,
> SELECT A.*, B.*, C.* FROM
> TABLA1 A
> LEFT JOIN TABLA2 B ON A.campo1 = B.campo2
> LEFT JOIN TABLA3 C ON A.campoX = C.CampoX
> WHERE A.Fecha > '12-06-2005 10:00:00'
Esa era la respuesta
Eso era lo que estaba buscando, como se podian anidar los joins. Lo he
hecho haciendo JOINS de JOINS
SELECT A2.* FROM
(SELECT A1.* FROM
(SELECT A0.* FROM TablaA AS A0 LEFT JOIN TablaB ON whatever)
AS A1 LEFT JOIN TablaC) ... ETC
pero voy a probarlo como dices, porque la consulta esta un poco lenta y
tal vez poniendolo así­ se mejora.
> Ten en cuenta que si vas a usar el resultado en un recordset de ADO deberás
> forzosamente utilizar alias en las columnas que tengan el mismo nombre en
> las diferentes tablas. Por ejemplo:
>
> SELECT A.micampo1 AS CAMPO1, B.micampo1 AS CAMPO2, ....
Si, eso lo he tenido en cuenta, y de hecho lo hago por mi salud mental:
las columnas de las tablas se llaman FACT1, FACT2, FACT3, etc... y leer
eso es nauseabundo.
>
> Yo suelo utilizar el administrador corporativo (o el nuevo SqlServer
> Management Studio) para probar los selects.
Estoy importando datos ajenos y de casualidad puedo acceder ReadOnly, ni
hablar de entrar al administrador.
Gracias por la ayuda,
Carlos
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

Claudio,
> Perdon por la confusión con el #. Yo utilizo Access y funciona con #.
> Pense que en SQL Server serí­a igual, ya que son los dos productos de
> Microsoft.
>
> Yo utilizo MySQL o Postgres como servidores y tambien es con comillas
> simples.
Barbaro, ya voy a probar algo con el access seguro porque estoy
boludeando con al ADO y tengo a medio armar una clase wrapper y las
pruebas las tendré que hacer con access que creo ya viene incluido en la
instalación básica del ADO.
Serí­a una pena que el access no se coma el ' y haya que usar #, pero
bueno, de alguna manera se podrá hacer.
Gracias por la ayuda,
Carlos.
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por jasm »

Carlos,
Desde el principio supuse que te complicabas la vida.
Aunque ya te dieron la respuesta te aconsejo que acudas a Internet y
veas la respuesta por ti mismo, en menos tiempo y con seguridad.
La sintaxis SQL está al alcance del Google ;-)
Un abrazo,
Jose A. Suarez
Carlos Mora
Mensajes: 88
Registrado: Vie Jul 28, 2006 9:36 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por Carlos Mora »

José Alfonso,
> Desde el principio supuse que te complicabas la vida.
Al contrario de lo que supones, me la simplificaba. Pregunté donde hay
gente que sabe más que yo de un tema que no manejo y que de momento no
me interesa profundizar. ¿Eso es una simplificación, no?
> Aunque ya te dieron la respuesta te aconsejo que acudas a Internet y
> veas la respuesta por ti mismo, en menos tiempo y con seguridad.
> La sintaxis SQL está al alcance del Google ;-)
El recomendarme que busque información en internet es un consejo
innecesario, porque en general es algo que hago normalmente, no soy de
andar colgándome del conocimiento de otros, pero en el caso de SQL, que
solo lo uso eventualmente cuando importo datos a mi aplicación, es más
productivo y razonable preguntar directamente, ya que por una unica
consulta me he tenido que poner con ADO y distraer tiempo que no siempre
se rentabiliza. Además en este caso en particular se trata de SQLServer,
motor con el que no he tenido ningun tipo de relación en mi vida, de
hecho nunca hice nada serio con SQL.
> Un abrazo,
Otro para tí­,
Carlos.
desarrollo
Mensajes: 109
Registrado: Lun Abr 02, 2007 10:12 am

Preguntas de principiante: sintaxis de varios LEFT OUTER JOIN

Mensaje por desarrollo »

No se si será mi estado de ánimo (bastante jodido) o yo que se que cosa,
pero últimamente siento que cadavez que intento hacer un comentario con
intenciones de ayudar termino ofendiendo a la gente.
Lo siento.
Esperaré a ver si salgo de la crisis para poner comentarios.
Saludos
Jose A. Suarez
"Carlos Mora" <carlos.mora@atisa.es> escribió en el mensaje
news:[email=47be9775@ozsrv2.ozlan.local...]47be9775@ozsrv2.ozlan.local...[/email]
José Alfonso,
> Desde el principio supuse que te complicabas la vida.
Al contrario de lo que supones, me la simplificaba. Pregunté donde hay
gente que sabe más que yo de un tema que no manejo y que de momento no
me interesa profundizar. ¿Eso es una simplificación, no?
> Aunque ya te dieron la respuesta te aconsejo que acudas a Internet y veas
> la respuesta por ti mismo, en menos tiempo y con seguridad.
> La sintaxis SQL está al alcance del Google ;-)
El recomendarme que busque información en internet es un consejo
innecesario, porque en general es algo que hago normalmente, no soy de
andar colgándome del conocimiento de otros, pero en el caso de SQL, que
solo lo uso eventualmente cuando importo datos a mi aplicación, es más
productivo y razonable preguntar directamente, ya que por una unica
consulta me he tenido que poner con ADO y distraer tiempo que no siempre
se rentabiliza. Además en este caso en particular se trata de SQLServer,
motor con el que no he tenido ningun tipo de relación en mi vida, de
hecho nunca hice nada serio con SQL.
> Un abrazo,
Otro para tí,
Carlos.
Responder