Título: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 14 Diciembre 2009, 19:41 pm Hola,
Tengo el siguiente problema.. Tengo 7 bases de datos, con datos del 1 al 1200, 1200 al 2300 y así.. son consecutivos pero están partidos :xD bueno, me pasaron una base de datos concentrada con todas las filas que supuestamente están (o deberían estar en las mini bases). La primer consulta es cómo puedo seleccionar las filas donde un entero sea diferente, digamos que tengo un numero en un campo y necesito sacar los número únicos de la base de datos concentrada. La segunda es como puedo obtener las filas que NO estén en las mini bases pero que estén en la base de datos concentrada (ya únicas). Es en Mysql. Gracias de antemano, Alfonso. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 14 Diciembre 2009, 19:47 pm Bueno, ya resolví la primera con DISTINCT jeje ;D
Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: Azielito en 14 Diciembre 2009, 19:59 pm a ver si te sirve esto, metes todos los registros en una base de datos llamada "completa", o sea, ahí metes las partes de la base de datos, entonces haces
Código
donde "id" es el identificador único, o tal vez entendi mal? Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 14 Diciembre 2009, 20:09 pm Sí, sí funcionaría pero los IDs no están continuos, no puedo meterlos por IDs xD, por ejemplo, se me ocurrió como hacerlo en PHP..
por cada registro en la base de datos completa (ya filtrada){ hago consulta a la primer mini base y comparo con el que tengo en el row del pimer for.. si no esta me sigo a la segunda hasta que llegue a la 7. si no la encuentro inserto en la nueva base de datos } Algo así tendría que ser.. :-\ Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 14 Diciembre 2009, 20:23 pm Vamos a ver lo que yo entiendo tu tienes 2 tablas por ejemplo, y tu quieres obtener los registros de 1 tabla pero que no aparezcan en la otra???? porque si fuera el caso seria algo asi:
Código
Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 15 Diciembre 2009, 01:05 am Con el ejemplo anterior te sirve, aunque la demostracion sea solo con 2 tablas. Cree 6 tables (En tu caso son 7) aunque desconozco en su totalidad que tipo de estructura poseen tus tablas, me imagino si es que tienen alguna relacion las 7 que deben tener 1 o mas campos donde concuerden siempre y asi poder retornar las consultas que macheen. En tu caso quieres todos los registros de una tabla particular donde dicho registro no exista o se repita en las otras 6 tablas. No es complicado mira otro ejemplo pero con mas de 2 tablas.
Código
Por ende tengo 6 tablas, y los datos que me interesan son los de la tabla ejemplo precisamente la fila numeros que no concuerden con ningun campo de las demas tabls entonces: Código
Analiza bien los registros de las tablas posteadas y comparalos a los registros de otras tablas, veras que solo aparecen aquellos numeros que no se reflejan en ninguna de las 6 tablas solicitadas. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: sempus en 15 Diciembre 2009, 16:51 pm дٳŦ٭ depende si estamos hablando de datos de una tabla padre, porque en un tabla padre los datos practicamente no se repiten y no me refiero puramente al ID, pero si es una tabla Muchos, los datos se repiten y como sabras, aunque filtres por una subconsulta como lo hace ^TiFa^ el resultado seria erroneo, porque supon que tiene un codigo X en la tabla muchos, tal y como lo hace ^TiFa^ con una vez que aparezca el codigo X se jode el resultado, porque abria que ver cuantas veces deberia de estar dicho codigo X en tu tabla completa y tantas veces deberia de estar en las tablas separadas que tienes y que los datos sean identicos y suponiendo que sean resultados numericos, la suma deberia ser la misma, por eso, yo antes de intentar dar una solucion desearia que nos aclaremos el panorama que tienes con tus tablas y asi intentar ayudarte o todo se rige por el correlativo? o podria ser que el correlativo de una no concuerde con la que esta completa?, o al concordar supuestamente estarian bien los datos? y solo buscariamos los correlativos faltantes? Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 15 Diciembre 2009, 17:53 pm Sempus, aunque tu teoria es valida. Yo me guie de esto para poder deducir el modelo de las tablas ejemplos que expuse:
Citar Tengo 7 bases de datos, con datos del 1 al 1200, 1200 al 2300 y así.. son consecutivos pero están partidos El dice que son todos los datos son consecutivos pero divididos entre las 7 tablas. Luego expone: Citar La segunda es como puedo obtener las filas que NO estén en las mini bases pero que estén en la base de datos concentrada (ya únicas). Basandome en lo que el peticiona, 'datos unicos' estoy pensando que no se refiere a datos repetidos y en caso que sean repetidos (relacion de a muchos) deberian obviarse porque ya no son unicos sino que son repetidos. A lo mejor interprete mal, pero me he guiado de valores consecutivos divididos entre varias tablas, y obtenet datos unicos en la tabla padre que no se repitan en la tablas hijos, y como la tabla padre asumo tiene valores 'unicos' (si esta bien modelado y estructurado el asunto) que se repitan los mismos valores en hijos deberia obviarse y no retornarse en la consulta... o al menos eso he entendido yo por su peticion de datos unicos que aparezcan en la tabla padre y que no matcheen o concuerden en las tablas hijos. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: sempus en 15 Diciembre 2009, 18:12 pm nose, yo lo decia mas bien por otro lado xD , osea como que el numero de factura sea 0001, y evalues simplemente que esa factura exista en las tablas separadas, pero que exista no quiere decir que sea la misma porque el valor puede ser distinto asi como la Serie de la factura, mas bien por ese lado iba yo, aunque si tu y el recalcan el unico entonces supongo que ya no desea Reevaluar, mas bien yo lo decia por el lado de la Reevaluacion y lo digo porque el dice que la tabla completa esta unica (que entendi no la hizo el sino que se la dieron), pero no asi las separadas y que el separo con DISTINCT, y si fuese por ejemplo como el caso de una factura, ese DISTINCT me podria mentir, no lo he dicho por contradecirte ^TiFa^ :-*
Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 15 Diciembre 2009, 18:18 pm No chico como crees :D entiendo tu punto completamente, porque es valido... pero puestos que el dijo pidio eso desde un principio 'datos unicos que no se reflejen en las demas tablas' supuse lo que supuse....
Porque si fuese por lo que comentas (Que existe de hecho ese estructurado y es valido) entonces, su peticion ya no seria querer datos unicos de la tabla padre que no aparezcan en las demas tablas hijos. Todo depende lo que el exponga, porque me he basado en una peticion vaga he deducido en base a esa peticion, pero si viera al menos ejemplo o modelo de las tablas, podria deducir de mejor manera realmente que es lo que el desea obtener. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 15 Diciembre 2009, 19:19 pm Paso a explicarles :)
Tengo exactamente 5 bases de datos en MySql a las cuales les podríamos llamar "mimi-bases", las cuales contienen registros de clientes: id_cliente INT nombre CHAR id_tienda INT codigodepromocion INT codigousado CHAR [aqui le pongo si o no] registro DATE Ahora, esas 5 bases de datos tienen los registros del 1 al 2000 (mini-base 1), 2000 al 4000 (mini-base 2) y asi consecutivamente. Tengo una base de datos (que podemos llamar mamá) que concentra las 5 mini-bases, la tarea era obtener los codigos de promocion (campo codigodepromocion) únicos de la base de datos "mamá" (resuelto con DISTINTC), y a su vez ya teniendo una base de datos "pura" (ya que muchos se repiten), buscar los registros que estén en las bases de datos que tengan en el campo codigousado = NO. Gracias :) Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 15 Diciembre 2009, 19:30 pm Haber tu base de datos 'mama' tiene esto:
id_cliente INT nombre CHAR id_tienda INT codigodepromocion INT codigousado CHAR [aqui le pongo si o no] registro DATE Y la consulta que realizaste con DISTINCT lo hiciste unicamente consultando a la tabla 'mama' o tuviste que comparar los datos de 'mama' con las 5 mini-bases???? La consulta que quieres donde debas retornar todos los registros del campo codigousado=NO es unicamente sobre la tabla 'mama'? o dicho campo codigousado tambien existe en las otras 5 mini-bases y quieres obtener el resultado de 'mama' y las 5 mini-bases en 1 sola consulta SQL donde el campo codigousado=NO en la tabla 'mama' y las 5 mini-bases???? Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 15 Diciembre 2009, 20:47 pm Citar Haber tu base de datos 'mama' tiene esto: id_cliente INT nombre CHAR id_tienda INT codigodepromocion INT codigousado CHAR [aqui le pongo si o no] registro DATE Y la consulta que realizaste con DISTINCT lo hiciste unicamente consultando a la tabla 'mama' o tuviste que comparar los datos de 'mama' con las 5 mini-bases???? Yep. Citar La consulta que quieres donde debas retornar todos los registros del campo codigousado=NO es unicamente sobre la tabla 'mama'? o dicho campo codigousado tambien existe en las otras 5 mini-bases y quieres obtener el resultado de 'mama' y las 5 mini-bases en 1 sola consulta SQL donde el campo codigousado=NO en la tabla 'mama' y las 5 mini-bases???? Así es, también existe en las otras, están homologadas. Gracias :D Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 15 Diciembre 2009, 21:06 pm Ok... pero, los registros finales que quieres obtener solo son los campos de la tabla 'mama' o quieres obtener otros campos que pertenecen a las 5 mini-tablas???? Si fuera mas o menos lo anterior expuesto, seria algo tipo:
SELECT DISTINCT mama.nombre, mini1.id_tienda, mini2.id_cliente FROM mama, mini1, mini2 WHERE mama.codigousado NOT IN( select mini1.codigousado FROM mini1 WHERE codigousado = NO ) AND mini1.codigousado NOT IN( selectt mini2.codigousado FROM mini2 WHERE codigousado = NO) AND mini1.id_cliente = mama.id_cliente AND mini2.id_cliente = mini1.id_cliente No lo he probado, pero deberia ser algo similar a lo anterior. Pero primero necesito saber si realmente existe referencia real identica entre el campo codigousuario de 'mama' y las tablas 'minis' Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 16 Diciembre 2009, 00:23 am Hola Tifa, muchas gracias por tu interés y ayuda.
Me quedaría con los registros de la base "mamá", en cuanto a referencia indentica también la hay ya que es un entero de 16 caracteres único. Precisamente por eso nencesito filtrarlos, para quedarme con los códigos NO usados. Probaré la query y os cuento. Gracias, Alfonso. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 16 Diciembre 2009, 00:29 am Igual y me van a querer matar ;D pero no son bases, son tablas jeje. :-\ perdón.
Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 16 Diciembre 2009, 00:32 am A lo mejor es mucho pedir, pero creo que en esa parte Sempus tiene razon no puedo sugerir solucion en base a una idealizacion de un escenario expuesto por ti.
Sino es mucho pedir, podrias describirnos que campos continen la tabla mama y al menos 2 de las mini-base y colocar un ejemplo de los datos que tienen cada tabla y mas o menos la consulta final como te gustaria que salgan para uno tener una idea mas clara de como acomodar la consulta SQL. Porque por ejemplo si yo tuviera 2 tablas (me voy a basar en 2 tablas en este ejemplo): Tabla mama: id_cliente INT nombre CHAR id_tienda INT codigodepromocion INT codigousado CHAR [aqui le pongo si o no] registro DATE Tabla Mini1 id_cliente INT mensaje varchar(100) codigousado CHAR [aqui le pongo si o no] Si en tu caso que solo te interesan los registros de la tabla 'mama' no seria necesario comparar el campo codigousado de 'mama' con codigousado de 'Mini1' ya que si solo son los registros de 'mama' bastaria con un simple: SELECT ...FROM 'mama' WHERE codigousado = 'NO' Ahora, si tu quisieras vamos a suponer el registro nombre de la tabla 'mama' y el registro mensaje de la tabla 'Mini1' (suponiendo como ejemplo ) entonces ahi si, habria que dar un uso de JOIN con 'mama' y todas las tablas 'Mini1' y decir que codigousado = 'SI' en todas las tablas relacionadas en el JOIN o sea: mama.codigousado = 'SI' AND Mini1.codigousado = 'SI' AND Mini2.codigousado = 'SI' Y asi sucesivamente... pero ten en cuenta que no basta solamente con la expresion anterior, si las tablas fueron disenadas relacionandose una con la otra, en algun punto deberan concordar o ser identicas en el valor, entonces aqui entraria las primary key o indice de cada tabla del JOIN, quedando mas o menos tu consulta final con: mama.codigousado = 'SI' AND Mini1.codigousado = 'SI' AND Mini2.codigousado = 'SI' AND Mini1.id_client = mama.id_client AND Mini2.id_client = mama.id_client De lo contrario tendrias un producto cartesiano y datos no muy correctos del todo... por eso es importante en caso que no llegues a una solucion, poder ver parte (Aunque sean 5 lineas de registros) de los campos que poseen la tabla 'mama' y los hijos que quieres relacionarle. Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: дٳŦ٭ en 16 Diciembre 2009, 00:47 am Tifa, tienes razón, las tablas tienen la siguiente estructura:
Código: mysql> DESCRIBE clientesconcentrada; Ya extraí todos los registros que me resultaron del DISTINCT (de la tabla clientesconcentrada [mamá]), la tabla se llama clientesfiltrados, estas filas son únicas (diferenciandolas mediante el código de promoción), las cuales tengo que comparar con las otras tablas y ver cuales tienen en codigousado = no. Esto es para ver que códigos están sin usar. Gracias!! Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 16 Diciembre 2009, 01:55 am Ok lo que intentas decirme es que todas las tablas tienen los mismos campos los mismos valores y en el unico campo donde se diferencian es en 'codigopromocion'???
Si la respuesta es afirmativa, entonces cree 2 tablas identicas a la que me mostraste pero donde unicamente varian el valor de codigopromocion de cada una: Código
Ambas tablas tienen los mismos datos en todos los campos (A excepcion de codigodepromocion como me estas diciendo) Por ende la siguiente consulta SQL seria valida si quieres obtener todos los codigodepromocion (De las 2 tablas en este caso) donde el valor sea 'NO' Código
Donde: Código
Y donde: Código
En tu caso que son 5 tablas, haces lo mismo en el JOIN quedando mas o menos: Código
Título: Re: Seleccionar datos únicos, comparar con otra base, dos consultas Publicado por: ^Tifa^ en 16 Diciembre 2009, 02:27 am Se me paso decirte, pero de consejo esto:
Citar mysql> DESCRIBE clientesconcentrada; +-----------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+------------------+------+-----+---------+----------------+ | id_clientes | int(10) unsigned | NO | PRI | NULL | auto_increment | | id_tienda | int(10) unsigned | NO | | NULL | | | nombre | varchar(255) | YES | | NULL | | | codigodepromocion | int(16) | YES | | NULL | | | codigousado | varchar(255) | YES | | NULL | | | registro | date | YES | | NULL | | +-----------------------+------------------+------+-----+---------+----------------+ el campo nombre le asignaste una longitud varchar de 255 :-\ (Que nombre te ocuparia tanto espacio) lo mismo con codigousado que me informaste que solo guarda 2 registros o 'si' o 'no' sin embargo tambien tiene una longitud 255 en varchar :-\ seria suficiente que alteraras la o las tablas con estos respectivos valores por codigousado char(3) y nombre varchar(50) tambien recuerda no permitir ni dejar valores NULL insertarse en la tabla ;) |