如果条目不存在,则Mysql设置默认值

时间:2014-03-26 13:44:51

标签: mysql sql

当我执行以下查询时: -

SELECT users.id, users.username, users.last_login,
profile_pictures.pic_resized, profile_pictures.pic_blurred, 
user_profile.date_of_birth,  user_profile.u_country,
matches.total_score AS score,
favorites.id AS is_favorite,
relationships.id AS is_match,
profile_visitors.id AS is_profile_viewer,
block_chat.id AS is_blocked
FROM users
INNER JOIN user_profile ON users.id = user_profile.user_id
LEFT JOIN profile_pictures ON users.id = profile_pictures.user_id
LEFT JOIN match_collections ON users.id = match_collections.user_id AND match_collections.status='valid'
LEFT JOIN matches ON matches.collection_id = match_collections.id AND match_id = 44700
LEFT JOIN favorites ON favorites.subject_id = 11354 AND favorites.object_id = 44700
LEFT JOIN relationships ON relationships.user_id = 11354 AND relationships.friend_id = 44700
LEFT JOIN profile_visitors ON profile_visitors.viewed_id = 11354 AND profile_visitors.viewer_id = 44700
LEFT JOIN block_chat ON block_chat.subject_id = 11354 AND block_chat.object_id = 44700
WHERE users.id = 11354

结果显示为:enter image description here 其中is_favorite和is_match为null,表示这些表中没有用户44700的条目。

问题是:如何设置默认值,例如-1而不是NULL

4 个答案:

答案 0 :(得分:3)

你可以使用它: -

SELECT users.id, users.username, users.last_login,
profile_pictures.pic_resized, profile_pictures.pic_blurred, 
user_profile.date_of_birth,  user_profile.u_country,
matches.total_score AS score,
if(isnull(favorites.id),-1,favorites.id) AS is_favorite,
if(isnull(relationships.id),-1,relationships.id) AS is_match,
profile_visitors.id AS is_profile_viewer,
block_chat.id AS is_blocked
FROM users
INNER JOIN user_profile ON users.id = user_profile.user_id
LEFT JOIN profile_pictures ON users.id = profile_pictures.user_id
LEFT JOIN match_collections ON users.id = match_collections.user_id AND match_collections.status='valid'
LEFT JOIN matches ON matches.collection_id = match_collections.id AND match_id = 44700
LEFT JOIN favorites ON favorites.subject_id = 11354 AND favorites.object_id = 44700
LEFT JOIN relationships ON relationships.user_id = 11354 AND relationships.friend_id = 44700
LEFT JOIN profile_visitors ON profile_visitors.viewed_id = 11354 AND profile_visitors.viewer_id = 44700
LEFT JOIN block_chat ON block_chat.subject_id = 11354 AND block_chat.object_id = 44700
WHERE users.id = 11354

您可以使用if(isnull(exp1),exp2,exp3)处理nulls

所需的任何地方

答案 1 :(得分:3)

如果你想返回NULL以外的东西,如果那个字段中的内容使用CASE语句来覆盖返回的内容。

case when favorites.id is NULL then '-1' else favorites.id end as is_favorite

答案 2 :(得分:1)

您可以在mysql中使用COALESCEIFNULL来避免这种情况,例如

COALESCE(favorites.id,-1) AS is_favorite

OR

IFNULL(favorites.id,-1) AS is_favorite

答案 3 :(得分:0)

IFNULL应该完成这项工作:..., IFNULL(favorites.id,-1) as is_favorite, ...