![]() |
Sql
Hola a todos estoy haciendo una prueba para que al ejecutar una consulta, busque en 2 tablas distintas (NO JOIN).
Ejemplo tabla NISSAN clave nombre Tabla Peugeot clave nombre mi sintaxis es: SELECT DISTINCT * FROM pruebita.nissan, pruebita.peugeot si muestra el resultado...... pero al querer hacer por medio de WHERE: SELECT DISTINCT * FROM pruebita.nissan, pruebita.peugeot where clave='1'; Mensaje de error: Column clave in where clause is ambiguous mmmmm, lo unico que quiero implementar, es q por medio de mi sintaxis SQL busque en las dos tablas(NO PARA UNIR), pues quiero mostrar los resultados en DBedits. Alguna sugerencia? Karla:p |
No entiendo bien. ¿Quieres un resultado con cuatro columnas (las dos de cada tabla), o con dos columnas pero con los registros de ambas tablas?
Si es lo primero, ¿qué tiene de malo un JOIN? Relamente lo que haces es un JOIN, pero si no pones condiciones lo hace todos contra todos. Si es lo segundo, ¿qué tiene de malo un UNION? En cualquier caso, puedes desambiguar anteponiendo el nombre de la tabla, por ejemplo:
¿pruebita es el nombre de la base? // Saludos |
Consulta SQL
Hola:
Otra via que pudieras usar si estuvieses usando SQL Server 2000 es crear un Procedimiento Almacenado que incluya una tabla temporal como este ejemplo
De esta forma le podrias asignar a los edit los valores de los campos de esta consulta. Saludos Luis Garcia |
Gracias Roman y Lgarcia.... como siempre aclarando mis confusiones :p
Cita:
Y si, lo que quiero es mostrar mis resultados de ambas tablas en una sola columna, voy a hacer pruebas y posteo los resultados. |
|
Cita:
Hecho con MySQL :cool: Ahora lo voy a traducir para el Delphi 7, implementando un Boton y DBedit, hago pruebas y porteo los resultados :p |
Tengo una pregunta al respecto:
Veo que esto lo estan usando en MySQL, cuando se usa Union en FireBird este hace una especie de Distinct al resultado de dicha union de consultas, pero para evitar dicho Distinct hay que hacer Union All, ¿En MySQL como trabaja este asunto?, gracias por vuestra atención amigos :). |
Es igual. Por defecto, se excluyen filas repetidas y se usa union all para incluir todas.
// Saludos |
Cita:
|
Cita:
http://www.plus2net.com/sql_tutorial/sql_union.php |
Ahora le estoy poniendo una Clausula WHERE:
Pero me muestra mis 10 registros que tengo: 5 de Nissan y 5 de Peugeot. Esta mal implementada la clausula Where aqui? :rolleyes: |
Cita:
En cuanto a la clausula where que estas usando no le veo ningun problema, ¿No sera que todos los Nissan los tienes con clave 1? |
Cita:
y de la 6 .. 10 con diferentes modelos en Nissan Sigo leyendo mas, para encontrar la solucion |
Algo no está bien. El where sólo aplica al select anterior (Nissan en este caso) y no a toda la unión. Si ningún nissan tiene clave=1, debería regresarte sólo los de peugeot.
Si quieres aplicar una condición a toda la unión, puedes hacerlo a través de una subconsulta:
// Saludos |
es así:
un where para cada consulta intenatlo, no me hagas mucho caso. :( |
Es tal como dices Paoti.
// Saludos |
un where para cada consulta intenatlo, no me hagas mucho caso. :D exacto, al fin pude checar tu consejo Paoti, es cierto ahora si, ya puedo mostrar el campo que corresponde a mi clave de auto. Gracias a todos los que me ayudaron a entender esta sentencia UNION. Ahora lo voy a pasar a mi delphi. |
aunque ya detecte una falla en la sintaxis, por ejemplo, si escribo una clave que no existe Clave="11" en mi resultado
El resultado lo muestra como NULL; Lo que pasa es que en Tabla Peugeot no existe 11, pero en tabla Nissan si existe la 6. Voy a checar este error. |
no te entendi, con eso de que lo muestra nulo, las sentencias where son independientes, es decir, son propias solo para el ambito sentencia que las esta usando. en este caso, son dos "where" independientes
|
Cita:
Ahora si en la sentencia SQL tu pones ejemplo una clave='4' (te muestra un auto de Peugeot) pero si ahora tu pones una 9 (En teoria debe mostrar un auto de la Nissan), pero no :rolleyes: lo unico que muestra son claves de la tabla Peugeot. :p |
Haber Karlaoax <--- crei que tu nick hacia referenciaa Oaxaca.
mmmmh, veamos en la sentencia hay dos where, uno para cada tabla, el rpimer where su ámbito es solamente a la tabla que hace referencia, y el segunod where solo su ambito es a la tabla que hace referencia, no quiere decir que si haces un filtro, te va a filtrar la misma información de ls dos tablas.... es eso o no es eso, Saludos y bien día a todos |
Cita:
Entonces traduciendo lo expuesto: No podre hacer una busqueda en ambas tablas segun entiendo, aun cuando quiera ver los resultados de Nissan con Clave='9', me seguira mostrando un Peugeot. Y lo que yo quiero es, cuando escriba una clave Nissan, efectivamente me muestre una Nissan, etc. Perdon pero no soy de lArea Informatica y en ocasiones me cuesta entender la terminologia |
oky,
ahi va.... haber si me explico.
Como no hay ningun peugeot con clave 'PAOTI' solo te traera nissan.
aqui viceversa
este select no te tare nada.. ahora con
te trae todos.... P.S. no soy de Mty, pero ando viviendo aquí. mi cel es 81 11 7887 11, así me llamo Paoti. vivo en bariro antiguo por si tienes oportunidad de ir y te llavas la laptop |
Mira, de todas formas cuando tu introduces una clave q es Nissan '9' siempre te muestra un auto Peugeot, a eso me refiero. Y sigo sin saber por que :confused:
Cuando introduces una Clave='11' es Null por no existir dicho registro. |
Con todo respeto karlita, me parece que seria mejor que nos dijeras en lenguaje llano que es lo que quieres que te muestre.
Ya sabemos que tienes 2 listas de modelos de coches de marcas distintas (nissan y peugeot). Ahora de ahi que es lo que quieres que te de la consulta. Olvidate de SQL por un momento y ponlo en palabras normales. Por otra parte eso de null no tiene razón de ser ya que lo que hace UNION es unir las filas resultantes de un query con las de otro sin mas ni más. Si un where no coincide ningún registro no devolverá ninguna fila. En caso de que ninguno de los dos wheres se cumpla simplemente no tendremos ninguna fila en el query resultante no un null. El valor null unicamente se aplica a valores de columnas. Un dato importen para que UNION funcione las tablas deben tener el mismo numero de columnas. |
Contestandome solo y sugierendo algo:
Creo que lo que quieres es que dada una clave cualquiera, obtengas a que marca y modelo corresponde. La solución es muy simple: utiliza una sola tabla para almacenar todos los modelos asi: TABLA AUTOS Clave: Int Marca: varchar Modelo: varchar El campo marca correspondería con el nombre de las tablas que tienes en este momento, para este caso sería "Nissan" y "Peugeot". Ahora si, cada auto tiene su clave asignada por lo que bastaria un simple: para que te devuelva el modelo Nissan que mencionabas, pero si en vez de uno le pones 6, te devolvera el modelo Peugeot. Quien sabe quien diseño ese esquema de tablas porque está mal. Pero bueno sabemos que no es tu culpa. |
El manejador que utilizo es MySQL.
Cita:
Y lo de los autos, es solo una prueba antes de implantarlo en un sistema que estoy modificando, el cual utiliza 2 tablas distintas, bueno casi similares en campos. PS. No te enojes :o |
| La franja horaria es GMT +2. Ahora son las 16:36:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi