mysql seleccione un campo diferente es un campo es nulo

tengo una mesa de personal

id  int(11) 
names   varchar(120)
family_names    varchar(100)
nickname    varchar(100)

y una mesa de quien esta en el trabajo

  id    int(11)
  personid int(11)
  titleid    int(11)
  typeid    int(11)
  at_work   datetime
  status int(11)

Mi problema es que necesito generar un informe en el que verifique quién está en el trabajo y muestre los nombres, el apellido y el título. Como a las personas se les llama por apodo, primero debo verificar si existe un apodo, así que encuentro este ejemplo en este sitio

SELECT IF(LENGTH(nickname)>0, nickname, names) FROM staff_list

Obtendré el apodo o los nombres, pero no resuelven mi solicitud, ya que necesito buscar en la tabla mu who_is_at_work y luego obtener el personal en el trabajo y crear esa lista.

¿Es posible hacer una selección dentro de una selección para obtener los tres campos que necesito?

apodo/nombres, apellido, título

Después de un tiempo descubrí cómo hacerlo.

Encontré la solución, gracias por publicar. Esto es lo que terminé haciendo.

SELECT p.id AS ID, 
   IF(LENGTH(p.nickname)>0, p.nickname, p.names) AS 'Names/Nickname',
   p.family_names AS 'Family name', 
   r.rank AS 'Rank'
   FROM atworklist AS who
   LEFT JOIN stafflist as p on p.id = who.personid   
   LEFT JOIN title AS r ON r.id = p.titleid
   where who.shipid= 2 and who.status in (2,3)
   ORDER BY r.sortorder

Funciona como un encanto para mí

preguntado el 27 de julio de 12 a las 16:07

1 Respuestas

Si desea deshacerse de los valores nulos, puede usar coalesce.

select coalesce(nickname, names) from staff_list

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

Si desea buscar cadenas vacías, puede hacerlo de esta manera:

 select case when nickname = '' then names else nickname end from staff_list

Respondido 27 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.