Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Carloswaldo

#11
No entiendo cuál es el problema con usar GROUP BY y ORDER BY quitando el DISTINCT (que sería la manera correcta)
#12
No entiendo muy bien lo que necesitas. ¿Quieres la estructura de la base? ¿Quieres una base de datos de ejemplo? ¿En algún motor específico?
#13
Bases de Datos / Re: duda sql
20 Noviembre 2019, 14:31 PM
El problema es que en una misma columna de resultado intentas retornar datos de tipos diferentes (DATE en el caso de que hayan asistido, y VARCHAR si no han asistido), así que tienes que incluir un casting para que funcione. En mi ejemplo el "::text" era el casting, como ya veo que estás en Oracle, tendrás que hacer el casting así:

Código (sql) [Seleccionar]
CAST(MAX(e.fecha) AS varchar(50))

Cuéntanos cómo te fue.
#14
Bases de Datos / Re: Ayuda SQL
20 Noviembre 2019, 01:00 AM
¿Y cuál es la consulta?
#15
Bases de Datos / Re: duda sql
20 Noviembre 2019, 00:53 AM
No me parece que sea necesario hacer una subconsulta. Yo haría algo así:

Código (sql) [Seleccionar]
SELECT p.nombre, CASE
WHEN max(e.fecha) IS NOT NULL THEN
max(e.fecha)::text
ELSE
'No Asistió'
END
FROM persona p
LEFT JOIN asistio a ON a.id_persona = p.id_persona
JOIN evento e ON e.id_evento = a.id_evento
GROUP BY p.nombre


No dices en qué motor estás trabajando, esto lo hice en PostgreSQL pero asumo que puedes hacer algo parecido en otros motores. Además no sé cuál es la estructura de las tablas pero estoy asumiendo que es una relación muchos a muchos entre persona y evento que se rompe con la tabla asistio.
#16
Bases de Datos / Re: Compra de bases de datos
29 Octubre 2019, 21:23 PM
No.
#17
Pues si eso decía el contrato y tu lo firmaste, no hay nada que hacer. Sino, en tu respectivo país debe haber una agencia de gobierno donde puedas notificar irregularidades/abusos en tu lugar de trabajo.

Restringirte el acceso a internet no es un abuso. Lo lamento, pero aquí no te podemos ayudar a hacer lo que quieres.
#18
Veamos...

Código (sql) [Seleccionar]

SELECT n.id_notification as ID, u1.name as Emitter, u2.name as User
FROM notifications n
INNER JOIN users u1 ON n.id_emitter = u1.id_user
INNER JOIN users u2 ON n.id_user = u2.id_user;


¿Es eso lo que quieres lograr? Espero esta vez haber entendido bien. (Tienes que hacer 2 INNER JOINs hacia la misma tabla, para diferenciarlas le pones alias diferentes)
#19
Estoy tratando de entender bien el asunto y me he ido a leer tus otros temas. Tengo la impresión de que estás confundiendo un poco la funcionalidad de un INNER JOIN dentro de una consulta.

Tabla usuarios
id_user int
name text

Tabla notificaciones
id_notification int
id_user int
texto text

Teniendo los siguientes datos:

usuarios
id_user | name
---------+--------
1 | Carlos
2 | Miguel
3 | Juan


notificaciones
id_notificacion | id_user | texto
-----------------+---------+----------------------
1 | 2 | problema
2 | 2 | problema solucionado
3 | 1 | advertencia
4 | 3 | nota
5 | 3 | otra nota


Si yo quiero sacar los datos de todas las notificaciones con los nombres de sus respectivos usuarios:

Código (sql) [Seleccionar]
SELECT n.id_notificacion, u.name, n.texto
FROM notificaciones n
INNER JOIN usuarios u
ON n.id_user = u.id_user;


id_notificacion |  name  |        texto         
-----------------+--------+----------------------
               3 | Carlos | advertencia
               1 | Miguel | problema
               2 | Miguel | problema solucionado
               4 | Juan   | nota
               5 | Juan   | otra nota


Las 2 tablas tienen una relación entre sí y el INNER JOIN me sirve para decirle al motor de base de datos cúal es el campo que constituye la relación, en este caso el id del usuario.

Si yo quiero LIMITAR los resultados de mi consulta, me valdré de una condición. Digamos que solo quiero sacar las notificaciones de Juan:

Código (sql) [Seleccionar]
SELECT n.id_notificacion, u.name, n.texto
FROM notificaciones n
INNER JOIN usuarios u
ON n.id_user = u.id_user
WHERE u.name = 'Juan';


id_notificacion | name |   texto   
-----------------+------+-----------
               4 | Juan | nota
               5 | Juan | otra nota


O que quiero sacar las notificaciones de Juan y de Carlos:

Código (sql) [Seleccionar]
SELECT n.id_notificacion, u.name, n.texto
FROM notificaciones n
INNER JOIN usuarios u
ON n.id_user = u.id_user
WHERE u.name = 'Juan' OR u.name = 'Carlos';


id_notificacion |  name  |    texto   
-----------------+--------+-------------
               3 | Carlos | advertencia
               4 | Juan   | nota
               5 | Juan   | otra nota


Ya no necesito agregar o modificar nada de la condición del INNER JOIN porque la relación ya está hecha.

Ahora, veo que tienes un campo id_emitter, ¿para qué es este? Es posible que haya otro campo en notificaciones que también guarde un id de usuario, pero si haces esto:

Código (sql) [Seleccionar]
INNER JOIN notifications N ON U.id_user = N.id_emitter AND U.id_user = N.id_user

le estás diciendo que los datos que saque de la tabla usuarios tienen que ser de los que coincidan con mi id de usuario y (AND) al mismo tiempo tiene que coincidir con lo que haya en id_emitter, lo cual no termino de entender.

Para poder armar una consulta lo que primero que tienes que saber es ¿Qué resultado deseo obtener?, eso es lo que te pregunté y aún quiero saber. ¿Qué es lo que deseas obtener? (Olvidándose un rato de lo que luego vayas a hacer en php o cualquier lenguaje de programación que estés utilizando, que en realidad no tiene importancia hasta que saques el resultado correcto de tu consulta)

En la última consulta ¿Qué es "id_adm"?
#20
No entiendo la lógica de tu consulta. Veamos, tienes 2 tablas: usuarios y notificaciones, ¿qué quieres sacar en la consulta? Porque lo que yo entiendo es "sacar todas las notificaciones cuyo usuario sea el emisor y también sea el usuario (?), Y además tenga un id de notificación específico" ¿Hay un conjunto de datos que coincida con las condiciones? ¿Cuál es el resultado esperado? ¿Tienes un set de datos de ejemplo?