 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
INVITADO Invitado
|
Publicado: Sab 10 Ene, 2004 7:01 pm Asunto: que tiene mal esta consulta. o que pasa??? |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Sab 10 Ene, 2004 7:22 pm Asunto: |
|
|
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 |
|
 |
INVITADO Invitado
|
Publicado: Sab 10 Ene, 2004 7:29 pm Asunto: |
|
|
el and esta ..... ese no es el problema.....
lo escribi mal al pasarlo aca.... |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 10 Ene, 2004 11:07 pm Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 11 Ene, 2004 1:02 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 11 Ene, 2004 4:28 pm Asunto: |
|
|
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... _________________
 |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 11 Ene, 2004 11:02 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 12 Ene, 2004 1:33 am Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Lun 12 Ene, 2004 9:54 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 12 Ene, 2004 11:38 am Asunto: |
|
|
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.... _________________
 |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Lun 12 Ene, 2004 2:38 pm Asunto: |
|
|
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!
 _________________ OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|