elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  (SQL) Diferencias entre tablas de una misma tabla?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: (SQL) Diferencias entre tablas de una misma tabla?  (Leído 19,510 veces)
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
(SQL) Diferencias entre tablas de una misma tabla?
« en: 19 Mayo 2009, 00:47 am »

buenas, tengo una duda que me está volviendo loco, tengo una tabla del siguiente tipo:

Código:
eid | sid | data 
 1     1    "lara lara"
 1     1    "qewrqer"
 2     1    "asdfasdf"
 2     1    "lara lara"
 3     1    "qewrqer"
 3     0    "zxcvzcv"

falta el identificador del tabla pero es solo un campo auto incremental...

el tema es que: necesito obtener todos los datos que no pertenezcan a un "eid", que pertenezcan a un "sid" y que no se repitan... por ejemplo:

Código:
eid | sid | data 
 1     1    "lara lara"
 2     1    "asdfasdf"

cuando el eid sería 3 y el sid sería 1... actualmente lo estoy haciendo de una forma un tanto embrollada:

obtengo todos los "data"'s distintos que pertenezcan al sid 1, todos los "dats"'s distintos del eid 3 sid 1, y hago una diferencia de arreglo, eso me devuelve:

Código:
"lara lara","asdfasdf"

por lo que luego tengo que buscar la primera referencia en la tabla a un "lara lara" o un "asdfasdf" y obtengo el resultado... pero es muy embrollado y no me parece eficiente...

Alguna idea de como puedo hacerlo de otra forma?

S2


En línea

Anibal784


Desconectado Desconectado

Mensajes: 762

Yo no la vote, pero me la tengo que aguantar igual


Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #1 en: 19 Mayo 2009, 01:24 am »

Y por qué no sirve ésto:
Código
  1. SELECT *
  2. FROM tabla
  3. WHERE eid <> aux_eid AND sid = aux_sid
  4.  


En línea

El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #2 en: 19 Mayo 2009, 04:05 am »

porque eso me tira los que son diferentes... no si hay repetidos, y además, aux_eid pueden ser muchos... me tiraría solo si es diferente una fila de la tabla... no se si entendés...

S2
En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #3 en: 19 Mayo 2009, 05:32 am »

Proba unsando la clausula GROUP BY de sql...
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #4 en: 19 Mayo 2009, 05:43 am »

contexto? los agrupo por... y después? que gano con eso?

S2
En línea

Anibal784


Desconectado Desconectado

Mensajes: 762

Yo no la vote, pero me la tengo que aguantar igual


Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #5 en: 19 Mayo 2009, 15:41 pm »

No entiendo bien qué es lo que quieres, si pueden ser diferentes eid (más de uno, por ejemplo 2, 3 y 4) sería cuestión de generar la consulta mediante el lenguaje. Como estamos en el foro de PHP supongo que debe ser PHP el lenguaje que utilizas, sería mao meno así:
Código
  1. <?php
  2. $qry = "SELECT * FROM tabla WHERE (eid <> ";
  3. foreach($eids as $eid){
  4.    $qry .= $eid;
  5.    if(Hay siguiente en eids){
  6.        $qry .= " AND eid <> ";
  7.    }else{
  8.        $qry .= ") AND (sid = ";
  9.    }
  10. }
  11. $qry .= $sid;
  12.  
o algo por el estilo, así si por ejemplo $eids = array(2, 3, 4); y $sid = 1 debería generar una consulta mao meno así:
Código:
select * 
from tabla
where (eid <> 2 AND eid <> 3 AND eid <> 4) AND sid = 1
luego sería cuestión de llamar a una función que te filtre los duplicados... ¿será eso lo que quieres?
En línea

El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #6 en: 19 Mayo 2009, 19:52 pm »

lo que tengo es una tabla de "archivos":

Citar
iddesc  idduenio idtipo idarchivo
   1           1          1         2            <-"por ejemplo: archivo.exe"
   2           1          2         3            <-"por ejemplo: archivo.com"
   3           2          1         2            <-"por ejemplo: archivo.exe"
   4           3          2         4            <-"por ejemplo: archivo2.com"
   5           4          2         3            <-"por ejemplo: archivo.com"
   6           2          1         5            <-"por ejemplo: archivo2.exe"
   7           5          1         5            <-"por ejemplo: archivo2.exe"
   N....

entonces por ejemplo quiero listar todos los archivos de determinado tipo (sin repetir) menos los de dueño.

por ejemplo si digo dueño 1 me tendría que tirar algo como:

Citar
iddesc  idduenio idtipo idarchivo
   4           3          2         4            <-"por ejemplo: archivo2.com"
   6           2          1         5            <-"por ejemplo: archivo2.exe"
   N....

como se ve, no me tiene que repetir el "archivo" y no tiene que estar dentro del grupo de archivos del "dueño"...

sería algo así:

Código:
select * from tabla
where (idduenio <> 1 AND idarchivo <> "1".idarchivo[0] AND idarchivo <> "1".idarchivo[N]) AND (No Repetido)?

lo que yo estoy haciendo actualmente es: obtengo todos los archivos no repetidos:

Citar
archivo.com
archivo.exe
archivo2.com
archivo2.exe

obtengo los archivos del dueño:

Citar
archivo.com
archivo.exe

diferencia de arreglos (todos - dueño)

Citar
archivo2.com
archivo2.exe

y obtengo los datos de la primera aparición del archivo... pero me parece muy poco eficiente...

Saludos
« Última modificación: 19 Mayo 2009, 19:58 pm por Karman » En línea

Anibal784


Desconectado Desconectado

Mensajes: 762

Yo no la vote, pero me la tengo que aguantar igual


Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #7 en: 19 Mayo 2009, 20:36 pm »

Si es sólo el nombre de archivo Distinct
En línea

El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #8 en: 19 Mayo 2009, 21:06 pm »

Karman, los amigos aca tienen razon... tu solicitud esta un poco confusa de comprender  :-\  al menos yo estoy en el limbo, corrigeme sino es esto lo que deseas.

Hasta lo poco que he podido entender, tu lo que quieres es, sacar todos los registros de la tabla ejemplo que haz posteado, y que dicho registros no se repitan? Si esto es asi analiza un poco la situacion puesto, que tienes 3 campos donde en eid se pueden repetir, mas en data no, o si matcheas con no repetir los registros de data se repetiran los de eid... He realizado un escenario similar al tuyo.

Código
  1.  
  2. +------+------+-----------+
  3. | eid  | sid  | DATA      |
  4. +------+------+-----------+
  5. |    1 |    1 | lara lara |
  6. |    1 |    1 | qewrqer   |
  7. |    2 |    1 | asdfasd   |
  8. |    2 |    1 | lara lara |
  9. |    3 |    1 | qewrqer   |
  10. |    3 |    0 | zxcvzcv   |
  11. +------+------+-----------+
  12. 6 ROWS IN SET (0.00 sec)
  13.  
  14.  

Ok mira lo que ocurre si agrupo (Para evitar repetidos) por el campo eid.

Código
  1.  
  2. +------+------+-----------+
  3. | eid  | sid  | DATA      |
  4. +------+------+-----------+
  5. |    1 |    1 | lara lara |
  6. |    2 |    1 | asdfasd   |
  7. |    3 |    1 | qewrqer   |
  8.  
  9.  

Si agrupamos por data mira que pasaria :

Código
  1.  
  2. +------+------+-----------+
  3. | eid  | sid  | DATA      |
  4. +------+------+-----------+
  5. |    1 |    1 | lara lara |
  6. |    1 |    1 | qewrqer   |
  7. |    2 |    1 | asdfasd   |
  8. |    3 |    0 | zxcvzcv   |
  9. +------+------+-----------+
  10. 4 ROWS IN SET (0.00 sec)
  11.  
  12.  
  13.  

Vas captando la idea con GROUP?  de igual manera si hablamos de DISTINCT, uno de los campos sera los que no se repetiran si utilizas estas clausulas, aunque todavia no entiendo 100% lo que intentas realizar....

Disculpa mi nivel que no logre entender del todo.
En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: (SQL) Diferencias entre tablas de una misma tabla?
« Respuesta #9 en: 19 Mayo 2009, 22:10 pm »

conozco la sentencias DISTINCT (es la que uso para obtener los distintos) como puse acá:

obtengo todos los archivos no repetidos:

Citar
archivo.com
archivo.exe
archivo2.com
archivo2.exe

obtengo los archivos del dueño:

Citar
archivo.com
archivo.exe

y GROUP ... pero yo no solo necesito que sean distintos, sinó esto:

Citar
como se ve, no me tiene que repetir los nombres de "archivo" y no tiene que estar dentro del grupo de archivos del "dueño" (un determinado eid).../quote]

Citar
iddesc  idduenio idtipo idarchivo
   1           1          1         2            <-"por ejemplo: archivo.exe"
   2           1          2         3            <-"por ejemplo: archivo.com"
   3           2          1         2            <-"por ejemplo: archivo.exe"
   4           3          2         4            <-"por ejemplo: archivo2.com"
   5           4          2         3            <-"por ejemplo: archivo.com"
   6           2          1         5            <-"por ejemplo: archivo2.exe"
   7           5          1         5            <-"por ejemplo: archivo2.exe"
   N....

S2
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
2 foreign keys (delete cascade) haciendo referencia a una misma tabla
Bases de Datos
Littl3 1 3,741 Último mensaje 16 Septiembre 2011, 04:57 am
por fran800m
Diferencias en la misma imagen?¿
GNU/Linux
jhonsc 1 1,933 Último mensaje 23 Noviembre 2011, 04:23 am
por Foxy Rider
Cómo relacionar 1 tabla con N tablas
Desarrollo Web
carlosgxs 2 3,679 Último mensaje 6 Abril 2012, 05:57 am
por carlosgxs
foreing Key en la misma tabla
Bases de Datos
David Vans 0 1,994 Último mensaje 22 Febrero 2013, 00:18 am
por David Vans
¿Cuál es la diferencia entre la tabla sesión y la tabla usuarios?
Desarrollo Web
zagk 1 2,609 Último mensaje 1 Mayo 2018, 19:55 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines