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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Cómo Seleccionar un dato si existe en otra tabla?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo Seleccionar un dato si existe en otra tabla?  (Leído 5,695 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Cómo Seleccionar un dato si existe en otra tabla?
« en: 24 Agosto 2013, 05:35 am »

Hola, he tenido un lapsus mental y no recuerdo como hacer esto:

Necesito seleccionar todos los datos de una tabla siempre y cuando el id esté relacionado por lo menos con un dato en otra tabla.

Por ejemplo, seleccionar todas las casas de la tabla casa siempre y cuando haya por lo menos una persona con ese id de casa asociado en la tabla personas. Los datos no están relacionados por base de datos, es solo una columna llamada idCasa.

Hacer dos consultas no es una solución, intenté utilizar iner join sin resultados o un select count entre parentesis pero no me resultó tampoco. Son demasiados datos en la db asi que se demora un poco en hacer el count() a la tabla personas por cada casa, en total se demora cerca de 1 minuto en cargar un selector en html.

Este sistema no lo hice yo pero debo realizarle unos cambios y necesito trabajar sobre la estructura que ya está hecha, alguna idea?


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Cómo Seleccionar un dato si existe en otra tabla?
« Respuesta #1 en: 24 Agosto 2013, 05:52 am »

Bueno, hice algo que funciona pero no creo que sea lo mas recomendado:

Código:
SELECT idCasa, nombreCasa FROM Casas
INNER JOIN Personas ON Casas.idCasa = Personas.idCasa
group by Casas.nombreCasa

Alguien sabe otra manera de hacerlo mas eficiente?


En línea

Rudy21

Desconectado Desconectado

Mensajes: 154


Rudy21 Web Design


Ver Perfil WWW
Re: Cómo Seleccionar un dato si existe en otra tabla?
« Respuesta #2 en: 26 Agosto 2013, 10:30 am »

Puedes intentar así:

Select idCasa,nombrecasa from Casas where idCasa in (Select idCasa from Personas )


igual puedes intentar hacerlo con un DISTINCT

lo que haces ahi es decirle que te el idCasa de la tabla personas

y de la tabla Casas te devuelva el idCasa y el nombrecasa SOLO si esta presente en el select anterior =D

Saludos
En línea


1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Cómo Seleccionar un dato si existe en otra tabla?
« Respuesta #3 en: 26 Agosto 2013, 17:09 pm »

Supongamos que tienes más o menos las siguientes estructuras básicas en tus tablas.

Código
  1. CREATE TABLE casas (
  2.  casa_pk INT(11) DEFAULT NULL,
  3.  persona_fk INT(11) DEFAULT NULL,
  4.  casa_direccion VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL
  5. ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
  6.  

Código
  1. CREATE TABLE personas (
  2.  persona_pk INT(11) DEFAULT NULL,
  3.  persona_nombre VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL
  4. ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
  5.  

Código
  1. INSERT  INTO casas(casa_pk,persona_fk,casa_direccion) VALUES (1,1,'avenida siempre viva'),(2,2,'Callejón Salsipuedes, en Barri'),(3,2,'Siempreviva, Col. La Hera. Izt'),(4,2,'Mar de la Crisis, Col. Ojo de ');
  2.  
  3. INSERT  INTO personas(persona_pk,persona_nombre) VALUES (1,'Homer J. S.'),(2,'1mpuls0');
  4.  

La consulta que deseas realizar tendría que ser así.

Código
  1. SELECT casas.casa_pk, casas.casa_direccion, personas.persona_pk, personas.persona_nombre
  2. FROM casas, personas
  3. WHERE (casas.persona_fk=personas.persona_pk)
  4.  

En lo personal uso subquerys pero podrías utilizar INNER JOIN.

Código
  1. SELECT casas.casa_pk, casas.casa_direccion, personas.persona_pk, personas.persona_nombre
  2. FROM casas INNER JOIN personas
  3. ON casas.persona_fk=personas.persona_pk
  4.  

Tu resultado sería así.

Código
  1. +---------+---------------------------------+------------+----------------+
  2. | casa_pk | casa_direccion                  | persona_pk | persona_nombre |
  3. +---------+---------------------------------+------------+----------------+
  4. |       1 | avenida siempre viva            |          1 | Homer J. S.    |
  5. |       2 | Callejon Salsipuedes, en Barri  |          2 | 1mpuls0        |
  6. |       3 | Siempreviva, Col. La Hera. Izt  |          2 | 1mpuls0        |
  7. |       4 | Mar de la Crisis, Col. Ojo de   |          2 | 1mpuls0        |
  8. +---------+---------------------------------+------------+----------------+
  9. 4 ROWS IN SET (0.00 sec)
  10.  
  11. mysql>
  12.  
« Última modificación: 3 Septiembre 2015, 18:36 pm por 1mpuls0 » En línea

abc
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Cómo Seleccionar un dato si existe en otra tabla?
« Respuesta #4 en: 26 Agosto 2013, 17:56 pm »

Bueno, hice algo que funciona pero no creo que sea lo mas recomendado:

Código:
SELECT idCasa, nombreCasa FROM Casas
INNER JOIN Personas ON Casas.idCasa = Personas.idCasa
group by Casas.nombreCasa

Alguien sabe otra manera de hacerlo mas eficiente?

Está al revés, debes relacionar los campos id de la persona.
1 persona puede tener muchas casas.

Podrías mostrar la estructura de las tablas para ver si tiene algun problema.

Saludos.
« Última modificación: 3 Septiembre 2015, 18:37 pm por 1mpuls0 » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sacar un unico dato de un registro en una tabla. « 1 2 ... 5 6 »
PHP
XXXXXX 52 20,161 Último mensaje 26 Junio 2010, 00:17 am
por ~ Yoya ~
Crear tabla usando como nombre el campo de otra MYSQL [Solucionado]
Bases de Datos
Graphixx 1 4,247 Último mensaje 1 Diciembre 2010, 06:48 am
por Graphixx
Seleccionar filas de una tabla HTML con javascript
Desarrollo Web
M3LiNdR1 2 21,578 Último mensaje 20 Diciembre 2014, 23:16 pm
por martindn94
Actualizar un dato de una tabla
PHP
bgnumis 4 2,877 Último mensaje 1 Abril 2015, 20:54 pm
por engel lex
como pasar un dato a otra clase?
Java
owen 3 3,550 Último mensaje 13 Febrero 2016, 17:15 pm
por 0xFer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines