我需要一些替代内存的mysql查询。经过研究发现了concat函数。
问题是,我可以通过像CONCAT_WS('',sender.fname,sender.mname,sender.lname)AS sender_name这样的空格来连接吗?如果其中一个值为null,它是否有可能产生错误?
这是我的查询。
SELECT message.id, message.from_id, message.to_id, message.subject,
message.date, message.deleted, message.read,
CONCAT_WS(' ',sender.fname, sender.mname, sender.lname) AS sender_name,
CONCAT_WS(' ',recipient.fname, recipient.mname, recipient.lname) AS recipient_name,
FROM msghistory AS message
LEFT JOIN users AS sender ON sender.id=message.from_id,
LEFT JOIN users AS recipient ON recipient.id=message.to_id
GROUP BY message.id DESC
还有一个问题,在此查询中,可能找不到CONCAT_WS('',recipient.fname,recipient.mname,recipient.lname)AS recipient_name(如果users表中没有匹配的行)。这会给出任何错误吗?
答案 0 :(得分:1)
是的,您可以像这样使用CONCAT_WS
。如果其中一个参数为NULL,则不会出现错误。不使用NULL参数。
它在manual:
中说明了这一点CONCAT_WS()不会跳过空字符串。但是,它会在分隔符参数后跳过任何NULL值。
这也很容易为自己验证:
SELECT CONCAT_WS(' ', 'abc', NULL, 'def')
'abc def'
答案 1 :(得分:1)
是的,你可以。如果有null
,则不会有任何错误
答案 2 :(得分:1)
CONCAT_WS()不会跳过空字符串。但是,它会在分隔符参数后跳过任何NULL值。
那应该回答你的问题。
答案 3 :(得分:0)
即使详细,在处理可能出现不可接受的NULL值时,您还需要使用COALESCE函数:
CONCAT_WS(' ', COALESCE(val1, ''), COALESCE(val2, ''), ...)
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce