Seleccionar datos únicos, comparar con otra base, dos consultas

Iniciado por дٳŦ٭, 14 Diciembre 2009, 19:41 PM

0 Miembros y 1 Visitante están viendo este tema.

дٳŦ٭

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.


Con sangre andaluza :)


дٳŦ٭



Con sangre andaluza :)


Azielito

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 (sql) [Seleccionar]
CREATE TABLE `base_sin_duplicados` AS SELECT * FROM `completa` GROUP BY (id)

donde "id" es el identificador único, o tal vez entendi mal?

дٳŦ٭

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..  :-\


Con sangre andaluza :)


^Tifa^

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 (sql) [Seleccionar]


mysql> select * from prueba;
+----------+---------+
| numerito | datitos |
+----------+---------+
|        1 |       1 |
|        1 |       2 |
|        4 |       1 |
|        4 |       3 |
+----------+---------+
4 rows in set (0.00 sec)

mysql> select * from ejemplo;
+--------+-------+
| numero | datos |
+--------+-------+
|      1 |     1 |
|      2 |     2 |
|      3 |     3 |
|      4 |     4 |
|      5 |     5 |
+--------+-------+
5 rows in set (0.00 sec)


mysql> select ejemplo.numero from ejemplo where ejemplo.datos not in( select num
erito from prueba );
+--------+
| numero |
+--------+
|      2 |
|      3 |
|      5 |
+--------+
3 rows in set (0.02 sec)


^Tifa^

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 (sql) [Seleccionar]


mysql> select * from ejemplo;
+--------+-------+--------+
| numero | datos | indice |
+--------+-------+--------+
|      1 |     1 |      1 |
|      2 |     2 |      1 |
|      3 |     3 |      1 |
|      4 |     4 |      1 |
|      5 |     5 |      1 |
|      6 |     6 |      1 |
|      7 |     7 |      1 |
|      8 |     8 |      1 |
|      9 |     9 |      1 |
|     10 |    10 |      1 |
|     11 |    11 |      1 |
|     12 |    12 |      1 |
|     13 |    13 |      1 |
|     14 |    14 |      1 |
+--------+-------+--------+
14 rows in set (0.00 sec)

mysql> select * from prueba;
+------+                   
| fid  |
+------+
|    1 |
|    1 |
|    5 |
+------+
3 rows in set (0.00 sec)

mysql> select * from pruebax;
+------+
| id   |
+------+
|    1 |
|    2 |
|    5 |
+------+
3 rows in set (0.00 sec)

mysql> select * from pruebaxx;
+------+
| xid  |
+------+
|    4 |
|    5 |
|    6 |
+------+
3 rows in set (0.00 sec)



mysql> select * from pruebita;
+------+                     
| kid  |                     
+------+
|    4 |
|    7 |
|    8 |
+------+
3 rows in set (0.00 sec)



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 (sql) [Seleccionar]


mysql> select ejemplo.numero from ejemplo where ejemplo.datos not in( select fid from prueba ) and ejemplo.datos not in( select id from pruebax) and ejemplo.datos not in( select xid from pruebaxx ) and ejemplo.datos not in( select kid from pruebita ) and ejemplo.indice = 1;
+--------+
| numero |
+--------+
|      3 |
|      9 |
|     10 |
|     11 |
|     12 |
|     13 |
|     14 |
+--------+
7 rows in set (0.00 sec)



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.

sempus


дٳŦ٭ 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?
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

^Tifa^

Sempus, aunque tu teoria es valida. Yo me guie de esto para poder deducir el modelo de las tablas ejemplos que expuse:

CitarTengo 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:

CitarLa 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.

sempus

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^   :-*
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

^Tifa^

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.