2010-05-24 13 views
15

tengo esta consultaMysql combinación izquierda resultado nulo

SELECT articles.*, 
     users.username AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

Básicamente se devuelve la lista de artículos y el nombre de usuario que el artículo se asocia a. Ahora bien, si no hay ninguna entrada en la tabla de usuarios para una identificación de usuario particular, la var users es NULL. ¿Hay alguna forma de hacerlo que si es nulo, devuelve algo así como "Usuario no encontrado"? o tendré que hacer esto usando php?

Respuesta

33

Uso:

SELECT a.*, 
      COALESCE(u.username, 'User Not Found') AS `user` 
    FROM ARTICLES a 
LEFT JOIN USERS u ON u.id = a.user_id 
ORDER BY articles.timestamp 

Documentación:

La razón para elegir COALESCE sobre IF o IFNULL es que se unen es estándar ANSI, mientras que los otros métodos no son implementado de manera confiable sobre otras bases de datos. Usaría CASE antes de mirar IF porque, de nuevo, CASE es un estándar ANSI, lo que facilita el portar la consulta a otras bases de datos.

+0

gota esperar 8 minutos a aceptar ...: P – Ozzy

1

Puedes usar IF() donde en Oracle hubieras usado decodificación.

Así

SELECT articles.*, IF(users.username IS NULL, 'No user found', users.username) AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

debería funcionar. Nota: No tengo a mano mysql, por lo que no probé la consulta. Pero debería funcionar con modificaciones menores si falla. No Downvote;)

3

Usted puede utilizar la función IFNULL:

SELECT articles.*, IFNULL(users.username, 'User Not Found') AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
0

SELECT articles.*, 
     IFNULL(users.username,'User Not Found') AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
+0

comillas dobles en usuario no encontrado? ;) –

+0

No recomendado. :) –

Cuestiones relacionadas