Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

que tiene mal esta consulta. o que pasa???

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: que tiene mal esta consulta. o que pasa??? Responder citando

select * from orden a,cliente b, producto c
where a.fechapago = '01/09/04'
a.identcliente = b.ident
and a.producto = c.codigo

el error que aparece es
"general sql error"

utilizo tablas paradox
fechapago es de tipo fecha donde 01 es el mes 09 el dia y 04 el año
lo peor de todo es que en el database desktop la consulta funciona a la perfeccion
Volver arriba
Mensaje    Asunto: Responder citando

Si no es fallo de transcripción por tu parte y los campos que estás igualando en el where son correctos, y del mismo tipo, te falta un AND, luego quedaría algo así:

Código:

SELECT *
FROM orden a, cliente b, producto c
WHERE a.fechapago='01/09/04' AND a.identcliente=b.ident AND a.producto=c.codigo


Salvo que interesen todos los campos, no te sugiero esa aconsejo esa consulta "Select *", pues te va a devolver todos los campos de las tres tablas, con la consecuente repetición de los campos que son claves ajenas en las tablas afectadas, es más conveniente poner en el SELECT los campos que te vayan a hacer falta, así además reducirás el trafico de la red en el caso de que tu consulta atraviese los cables.

Ciao y suerte.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

el and esta ..... ese no es el problema.....
lo escribi mal al pasarlo aca....
Volver arriba
Mensaje    Asunto: Responder citando

Mira lo que esta mal, no es la sintaxis, es la palabra reservada orden
Código:

select * from orden a,cliente b, producto c
where a.fechapago = '01/09/04' [color=red]AND[/color] // creo falta
a.identcliente = b.ident
and a.producto = c.codigo



puedes ponerlo asi, no muy entiendo los campos a, b, c. pertenecen a cada uno de las siguientes tablas... orden cliente producto

si es asi, la sentencia debe ir

CROSS JOIN
Especifica el producto de la combinación de dos tablas. Devuelve las filas que se devolverían si las tablas que se combinan se indicaran en la cláusula FROM, sin especificar ninguna cláusula WHERE. Por ejemplo, el resultado que devuelven las dos consultas siguientes es el producto de una combinación cruzada de todas las filas de T1 y T2:
SELECT * FROM T1, T2

SELECT * FROM T1 CROSS JOIN T2


para ello puedes hacer lo siguiente...
Este ejemplo especifica una combinación externa izquierda en que las filas de Tab1 que no cumplen la condición especificada se incluyen en el conjunto de resultados:

SELECT Tab1.name, Tab2.id
FROM Tab1, Tab2
WHERE Tab1.id *=Tab2.id
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Las letras a, b y c, representan alias a las tablas, porque a veces es util para poner más comodamente ciertas cosas, orden es una palabra reservada ?, entiendo que order si lo es? pero orden es una palabra española no ?

Bueno yo de Paradox no controlo, imagino que podría ser una palabra reservada, aunque sinceramente me parece algo extraño.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Estoy de acuerdo, se me paso. pero lo que quiero decir es que la sintaxis esta mal.. ya que no se puede poner el nombre de la tabla y luego el alias, o es la tabla, vista o alias, pero no los tres juntos...

Código:

SELECT [ ALL | DISTINCT ]
    [ TOP n [PERCENT] [ WITH TIES] ]
    <listaSelección>


<listaSelección> ::=

    {    *
        | { nombreTabla | nombreVista | aliasTabla }.*
        |     { nombreColumna | expresión | IDENTITYCOL | ROWGUIDCOL }
            [ [AS] aliasColumna ]
        | aliasColumna = expresión
    }    [,...n]


Argumentos
ALL
Especifica que pueden aparecer filas duplicadas en el conjunto de resultados. ALL es el valor predeterminado.
DISTINCT
Especifica que sólo pueden aparecer filas exclusivas en el conjunto de resultados. Los valores NULL se consideran iguales a efectos de la palabra clave DISTINCT.
TOP n [PERCENT]
Especifica que sólo se van a utilizar las primeras n filas del conjunto de resultados de la consulta. Si también se especifica PERCENT, sólo se va a utilizar el primer n por ciento de filas del conjunto de resultados. Cuando se especifica PERCENT, n debe ser un entero entre 0 y 100.
Si la consulta contiene una cláusula ORDER BY, se utilizarán las primeras n filas (o el porcentaje n de filas) ordenadas por la cláusula ORDER BY. Cuando la consulta no tiene una cláusula ORDER BY, el número de filas es arbitrario.

WITH TIES
Especifica que las filas adicionales se devolverán del conjunto de resultados base con el mismo valor en las columnas ORDER BY que las últimas filas de TOP n (PERCENT). TOP WITH TIES sólo se puede especificar si hay una cláusula ORDER BY.
<listaSelección>
Son las columnas que se van a seleccionar para el conjunto de resultados. La lista de selección es una serie de expresiones separadas por comas.
*
Especifica que se deben devolver todas las columnas de todas las tablas y vistas de la cláusula FROM. Las columnas se devuelven por tabla o vista, tal como se especifique en la cláusula FROM, en el orden en que se encuentran en la tabla o vista.
nombreTabla | nombreVista | aliasTabla.*
Limita el alcance de * a la tabla o vista especificada.
nombreColumna
Es el nombre de una columna que se va a devolver. Califique nombreColumna para evitar realizar una referencia ambigua, como ocurre cuando dos tablas de la cláusula FROM tienen columnas con nombres duplicados. Por ejemplo, las tablas Customers y Orders de la base de datos Northwind contienen una columna llamada ColumnID. Si se combinan las dos tablas en una consulta, se puede especificar el Id. de cliente en la lista de selección como Customers.CustomerID.
expresión
Es un nombre de columna, constante, función, una combinación de nombres de constantes y funciones conectadas mediante operadores, o una subconsulta.


debo suponer que tus alias a, b y c, esta declarados al crear o abrir la tabla, por que no puedes ponerlo dentro de la clausula SELECT


quedando tu codigo asi

Código:

SELECT * FROM a,b, c
WHERE a.fechapago = '01/09/04' AND
a.identcliente = b.ident
AND a.producto = c.codigo


Asi si se pude realizar lo que pides... espero que haya quedad clara.. tu duda y saludos...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

El alias es un alias de tabla y está correctamente puesto. Se pueden usar alias tanto para nombres como para tablas, creo que lo tiene correctamente puesto, algo así:

SELECT nombre_campo_tablas as alias_nombre_campo, ....
FROM nombre_tabla alias_nombre_tabla, ..
WHERE ... etc

Lo que no puedes es poner darle un alias al nombre de tabla y luego no usarlo pues te dará un error. Es decir esto estaría mal probablemente:

Código:
SELECT loquesea
FROM facturas fac
WHERE facturas.codigo=13


Debería ser
Código:
SELECT loquesea
FROM facturas fac
WHERE fac.codigo=13


En tu solución:
Cita:

SELECT * FROM a,b, c
WHERE a.fechapago = '01/09/04' AND
a.identcliente = b.ident
AND a.producto = c.codigo


Que se supone que es a, b y c?
El interprete SQL desconoce que es a, b y c, el supondrá que son tablas, y es probable que estas no existan, piensa que el interprete SQL, intentará suponer que a, b y c son tablas, y claro en el momento que no las encuentra saltará un error, el debería ser esto:
Código:

SELECT *
FROM nombre_tabla1 a, nombre_tabla2 b, nombre_tabla3 c
WHERE .....

Ahí le indicas que a es un alias a nombre_tabla1, b es un alias a nombre_tabla2 y c es un alias a nombre_tabla3, luego en el where para referirte a los campos de las tablas debes usar los alias.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

mira, creo que no me expique bien..

Código:

Utilizar alias de tablas
La legibilidad de una instrucción SELECT se puede mejorar si se proporciona un alias a las tablas, conocido también como una variable de intervalo o nombre de correlación. Un alias de tabla se puede asignar con o sin la palabra clave AS:

nombreTabla AS aliasTabla
nombreTabla aliasTabla
En el ejemplo siguiente, el alias p se asigna a publishers.

USE pubs

SELECT p.pub_id, p.pub_name

FROM publishers AS p

 

Si se asigna un alias a una tabla, todas las referencias explícitas a la tabla en una instrucción de Transact-SQL deben usar el alias, no el nombre de la tabla. Por ejemplo, la siguiente instrucción SELECT genera un error de sintaxis porque usa el nombre de la tabla cuando se ha asignado un alias:

SELECT Customers.CustomerID, /* Illegal reference to Customers. */

       Cst.FirstName, Cst.LastName

FROM Northwind.dbo.Customers AS Cst

 


mira para referencia extraigo esto del SQL SERVER 7.0, que estoy utilizando donde dice que debes poner la palabra AS para referite a una tabla con su consulta quedando

Código:

SELECT *
FROM nombre_tabla1 AS a, nombre_tabla2 AS b, nombre_tabla3 AS c
WHERE .....




saludos
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Creo que te explicas bien, es lo mismo que he dicho, lo que te decía era que en la solución que dabas, no hacías referencias a las tablas, solo al alias dentro de la clausula FROM, luego debes poner el nombre de tabla y alias que quieres utilizar en la consulta, es decir, para usar el alias en la clausula SELECT o WHERE o cualquier otra clausula, pero debe estar correctamente definido en el FROM, y en tu consulta, obviaste las tablas originales sobre los que hacias el alias.

SELECT * FROM a, b, c WHERE ....

debería ser

SELECT * FROM tabla1 a, tabla2 b, tabla3 c WHERE ...

ó

SELECT * FROM tabla1 AS a, tabla2 AS b, tabla3 AS c WHERE ...

En fin creo que lo tienes suficiente claro tu explicación a si me lo hace ver, pero me parece que no ves el error en tu solución.

Ciao y cuidate Cesar.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias.. creo que no me fije, bien.... , lo que pense esque al momento de crear la tabla, se define tambien, el alias, y eso hace que tambien puedas utilizarla.. pero tienes razon.. ok



gracias por la observacion..

saludos....
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

De nada Cesar, no es la primera que se me escapa a mí y me apuntan también otros, aquí estamos todos para aprender y yo el primero.

Ciao y lo dicho, cuidate!
Razz
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.