Duda con búsqueda SQL

pantocreitor

Buenas! a ver si me podéis dar una pista porque llevo bastante rato con esto y no se me ocurre nada.

Tengo estas 2 tablas (entre muchas otras)

Y ahora mismo tengo esa consulta

El caso es que necesito que en la columna emailUsuario me aparezca un usuario que yo le pase en un where (o me muestre true), pero que si no está, la fila siga apareciendo sin el usuario (o null, false, etc...).
Llevo desde esta mañana liado con el proyecto y esta hora ya no se me ocurre nada de nada para este tipo de problemas :psyduck:

EDIT: el email y la id son parámetros que les pasaría desde la web, en este caso 1129 sería uno de los dos eventos ahora mismo que tienen 2 votos para una fecha.

pantocreitor

Ha hecho falta abrir el post para un cuarto de hora después (mas 1h30m de pruebas anterior) haya conseguido sacarlo (y como no era una chorrada)

#SQL
select count(f.mostrar), f.mostrar, 
   (select emailUsuario
   from fechavotada
   where emailUsuario = "adolfo@mail.com"
   and idFechaPropuesta = fv.idFechaPropuesta) 
from fechapropuesta f , fechavotada fv
where f.idFecha = fv.idFechaPropuesta
and f.idEvento = 1129
SiCk

Yo de todas formas lo haría con JOIN. No concretamente por el caso, si no porque es una buena práctica recomendable.

2 1 respuesta
pantocreitor

#3 Pues haciendo join no he visto manera de que no me filtrase, es decir, si no aparecía el mail no me mostraba la columna...
Aunque con un left join ese problema no lo hubiese tenido...

Nada, después de casi 13h mi cabeza ya no funciona correctamente xD

Muchas gracias por la ayuda!!!

EDIT: Si a alguien le viene bien paso la consulta con left join:

#SQL
select count(f.mostrar), f.mostrar, fv.emailUsuario 
   from fechapropuesta f 
   left join fechavotada fv
   on f.idFecha = fv.idFechaPropuesta
   and f.idEvento = 1131
   and fv.emailusuario = 'usuario@mail.com'
1 respuesta
SiCk

#4 Bueno, una máxima es "si funciona en tu caso, no compliques" pero es preferible ir acostumbrándose uno y hacerlo con JOIN por a) es más sencillo de leer y comprender [otros programadores, tú mismo en un futuro, etc] y b) en determinados casos el optimizador de la bbdd que uses, al obtener los rows puede hacer productos ("fusiones") completas de las dos tablas cuando en realidad solo necesita un conjunto concreto de una tabla "B". Siendo "explícito" con el JOIN lo evitas. Sobretodo si en un futuro tienes una tabla con millones de registros de "X" usuarios, si directamente con el JOIN eliges "ON" "un" usuario, ahorras. En ese caso es posiblemente ínfimo y de hecho probable que el optimizador ya lo haga así, pero "por si acaso" la costumbre...

1
bLaKnI

Pero una left join de toda la vida, ¿no?

eXtreM3

Left join y si la tupla no está te mostrará campos null.

1 1 respuesta
pantocreitor

#7 -> #4 xD

Muchas gracias igualmente!

BeerSerk

Para todas estas dudas, lo mejor es esta chuletilla!

Yo lo haría con joins 😉

2

Usuarios habituales

  • BeerSerk
  • pantocreitor
  • eXtreM3
  • bLaKnI
  • SiCk