Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Duda con SQL SELECT (https://www.clubdelphi.com/foros/showthread.php?t=53217)

paladincubano 14-02-2008 11:15:24

Duda con SQL SELECT
 
Hola amigos, vengo trabajando mucho tiempo con Access y nunca habia tenido problemas. Ya empece con SQL Server Express 2005 y me encuentro que cuando hago esta clausula:

Código SQL [-]
SELECT a.*,b.idObra FROM ObraVarios a,Obras b WHERE a.idObra=b.idObra
Yo creo que tendria que devolverme los siguientes campos:
- Value
- Concepto
- A.idObra
- B.idObra

Pero me esta devolviendo estos campos:
- Value
- Concepto
- idObra
- idObra_1

Al final el resultado no es el deseado, me devuelve todos los records de
ObraVarios.
Alguien sabe el porque??
GRACIAS

PeterPunk 14-02-2008 11:25:24

Aparentemente está bien. Vamos, que yo creo que en Oracle funciona como indicas.

De todas formas prueba de este otro modo:
Código SQL [-]
SELECT a.*, b.idObra
FROM ObraVarios a INNER JOIN Obras b
ON a.idObra=b.idObra

paladincubano 14-02-2008 11:30:04

Probe lo que me dijistes y nada, me devuelve lo mismo:

idObra
idObra_1

Otra sugerencia??

PeterPunk 14-02-2008 11:38:32

Ahora que me fijo en la consulta... los valores de b.idObra siempre serán los mismos que los de a.idObra, y como las campos se llaman igual, pues te devuelve un segundo campo idObra_1 que debe ser el b.idObra y lo renombra para evitar conflictos.

Si quisieras cambiar el nombre que se muestra para este campo sería así:
Código SQL [-]
SELECT a.*, b.idObra AS "b.idObra"
FROM ObraVarios a INNER JOIN Obras b
ON a.idObra=b.idObra

paladincubano 14-02-2008 11:43:15

Si, ahora me renombra el nombre.
pero no me hace la condicion y me sigue devolviendo.
En access eso no importa
Cuando haces esa clausula como te dijo te devuelve 2 campos automaticamente:
a.idObra
b.idObra
SQL debiera hacerlo tambien no??

PeterPunk 14-02-2008 12:00:34

Cita:

Empezado por paladincubano (Mensaje 265788)
pero no me hace la condicion y me sigue devolviendo.

No entiendo esto.
Supongo que te devolverá el mismo valor que tiene el idObra de ObraVarios.

Cita:

Empezado por paladincubano (Mensaje 265788)
Si, ahora me renombra el nombre.
En access eso no importa
Cuando haces esa clausula como te dijo te devuelve 2 campos automaticamente:
a.idObra
b.idObra
SQL debiera hacerlo tambien no??

No sé, hace años que no uso el SQL Server. De todas formas cada gestor de base de datos te devolverá lo que le programaron. Así Access te devuelve los campos como a.idObra y b.idObra, SQL Server como idObra e idObra_1 y me parece que Oracle te devuelve ambos como idObra

kuan-yiu 14-02-2008 12:04:26

Pues no que yo sepa. Oracle al menos devuelve el nombre del campo tal cual, sin incluir la tabla o los alias, como mucho si el nombre está repetido le añade "_1".

Delphius 14-02-2008 14:46:49

Disculpen que suene atrevido, pero ¿Que necesidad hay de devolver un campo repetido?

Si ya estas mostrando el campo A.idObra para que mostrar el campo B.IdObra si este tiene el mismo valor que el de la tabla anterior (A)?

La SQL debería ser:
Código SQL [-]
select A.*
from A iner join B ON A.idObra = B.idObra

Saludos,

paladincubano 14-02-2008 15:26:49

Si es muy buena todas las sugerencias y en especial la ultima,
Lo que pasa es que en el Grid no me hace el A.idObra=B.idObra
Me pone todos los valores de todas las obras, no se porque no filtra.
Al final he tenido que hacerlo manual.

Código Delphi [-]
....SQL.ADD('....WHERE idObra='+IntToStr(Obras['idObra']));
....SQL.Open;

de todas formas gracias por todo. Si cada vez que programe con SQL tendre estos problemas, pues no se, ninguna de estas cosas me pasaba con base de datos en Access.
Gracias

ContraVeneno 14-02-2008 15:35:56

pues que tengas dos campos iguales y que SQL Server te regrese uno agregándole un "_1" para evitar incongruencias, a mi me parece que es más una ventaja que un problema...

Problema es que tengas dos campos iguales con el mismo nombre...

SQL Server es infinitamente mucho mejor que Access para aplicaciones de bases de datos.

P.D. No solo SQL Server, cualquier otro motor de bases de datos es mejor que utilizar Access para una aplicación de bases de datos y multiusuario.


La franja horaria es GMT +2. Ahora son las 21:04:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi