Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Buscar en 2 tablas una fila que solo estaria en una  (Leído 1206 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Daniel
Technocrat
*********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Ingeniería Informática
Profesión: Desarrollador Web 2.0 - Administrador de Redes
Mensajes: 110


WWW
« en: 19/12/2005, 18:42:31 »

Hola gentes mi problema es el siguiente: tengo dos tablas "usuarios" y "temporal_usuarios" en las cuales una de las columnas tiene de nombre "apodo". El tema es que en el momento de insertar un registro, tengo que buscar primero que el campo "apodo" que se intenta ingresar, no esté ni en "usuarios" ni en "temporal_usuarios". La idea seria hacer un SELECT de las filas de ambas tablas donde (apodo=apodo que se intenta ingresar) y ver si arroja resultados, en ese caso pediría el ingreso de un apodo diferente (me gustaría hacerlo solo en una consulta).

Bueno no se si he buscado bien, pero no encontre una consulta que se asemeje a lo que quiero hacer. Tampoco se si es posible hacer una búsqueda en 2 tablas sin que la fila esté en ambas, ya me dirán ustedes.

Se agradece.

Saludos!
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 19/12/2005, 19:17:32 »

Espero haber entendido lo que preguntabas.
Tenes dos Tablas (USUARIOS y TEMPORAL_USUARIOS), en cada una de ellas una colmuna llamada APODO.
Necesitas ver si Existe tal APODO en esas dos tablas.
Si es asi seguí leyendo Lengua

Código
SELECT U.APODO FROM USUARIOS U WHERE U.APODO = APODO_INGRESADO /*ESTE ULTIMO ES UN PARAMETRO*/
UNION
SELECT T.APODO FROM TEMPORAL_USUARIOS T WHERE T.APODO = APODO_INGRESADO /*ESTE ULTIMO ES EL MISMO PARAMETRO QUE EL DE ARRIBA^*/
 

Si contiene algo, es porque en una de las dos tablas (sino en las dos), ya existe tu APODO_INGRESADO

Espero te sirva.
Saludos!
En línea

Daniel
Technocrat
*********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Ingeniería Informática
Profesión: Desarrollador Web 2.0 - Administrador de Redes
Mensajes: 110


WWW
« Respuesta #2 en: 19/12/2005, 20:32:43 »

Buenisimo en localhost anda perfecto, espero no tener dramas con el servidor. Ahora una pregunta: ¿por qué ponés U.APODO y T.APODO? ¿Que es esa U y esa T?
"FROM USUARIOS U WHERE" ahí aparece denuevo... ¿para que se ponen? Me da la sensación que son como alias, pero ni idea.

Saludos y gracias!
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #3 en: 19/12/2005, 21:45:34 »

En realidad coloqué esos alias solo para que se entienda mejor, no son necesarios en esa consulta. Asi que tranquilamente podes colocar:

Código
SELECT APODO FROM USUARIOS WHERE APODO = APODO_INGRESADO
UNION
SELECT APODO FROM TEMPORAL_USUARIOS WHERE APODO = APODO_INGRESADO

Los puse para denotar que la primer parte de la consulta se refiere a la tabla USUARIOS y la segunda a la tabla TEMPORAL_USUARIOS.

Un alias, es solo eso, otra forma de llamar a una tabla. Se usa para no tener que escribir de nuevo el nombre de la tabla cuando hay inconsistencias en cuanto a que se repitan nombres de columnas en dos o mas tablas. Por ejemplo, pude haber colocado asi:

Código
SELECT USUARIOS.APODO FROM USUARIOS WHERE USUARIOS.APODO = APODO_INGRESADO
UNION
SELECT TEMPORAL_USUARIOS.APODO FROM TEMPORAL_USUARIOS WHERE TEMPORAL_USUARIOS.APODO = APODO_INGRESADO

Consiguiendo el mismo efecto.

Que aproveche. Saludos!
En línea

Daniel
Technocrat
*********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Ingeniería Informática
Profesión: Desarrollador Web 2.0 - Administrador de Redes
Mensajes: 110


WWW
« Respuesta #4 en: 19/12/2005, 22:12:19 »

Buenisimo, todo muy claro.

Gracias!
En línea

TolaWare
Visitante
« Respuesta #5 en: 28/04/2006, 23:30:30 »

Un detalle del diseño de la base de datos:
Si tienes 2 tablas con los mismos atributos, entonces las 2 tabla deben unirse y colocarse un atributo que las distingan

Saludos
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #6 en: 28/04/2006, 23:44:09 »

No necesariamente, muchas veces se quiere tener un historial o como en este caso una tabla que contenga datos por procesar.
Hay que ver el diseño completo para estar seguros si le conviene colocar un campo más, por ejemplo:

Código:
ALTER TABLE USUARIOS
ADD TEMPORAL INTEGER NOT NULL;
-- Aqui migrar
DROP TABLE TEMPORAL_USUARIOS;

Para éste caso en particular, usaria una columna de tipo como dice TolaWare, por performance y espacio.
En línea

Daniel
Technocrat
*********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Ingeniería Informática
Profesión: Desarrollador Web 2.0 - Administrador de Redes
Mensajes: 110


WWW
« Respuesta #7 en: 29/04/2006, 00:59:52 »

En su momento pensé esa posibilidad, y luego de romperme la cabeza con algunos cálculos estadísticos y analizar los resultados implementé como es lógico la solución más eficiente que fue el uso de dos tablas separadas.

Un saludo.
En línea

Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: