2012-05-30 26 views
0

NULL结果我有以下查询:如何去除串联

SELECT concat(first_name, ' ', last_name) as full_name FROM auth_user 

我会怎么做等价的:

SELECT concat(first_name, ' ', last_name) as full_name FROM auth_user 
    **WHERE full_name IS NOT NULL** 

(其产生的Unknown column 'full_name' in 'where clause'

+0

因此,您只想跳过“first_name”和“last_name”为“NULL”的记录或要么? –

回答

2

两种方式围绕此:

SELECT concat(first_name, ' ', last_name) as full_name FROM auth_user 
WHERE first_name IS NOT NULL and last_name is not null 

,或者

select * from (
    SELECT concat(first_name, ' ', last_name) as full_name FROM auth_user) 
where full_name is not null 
+0

上述其中一个比另一个更理想吗? – David542

+0

这取决于您是否在这些列上有索引。查询非常简单,但如果您计划使用group by或where子句或其他操作,则第二个从可读性和查询逻辑角度来看更具可预见性,特别是如果您只想在full_name上操作时。 –

0
SELECT concat(IF(first_name IS NOT NULL, first_name, ''), ' ', IF(last_name IS NOT NULL, last_name, '')) as full_name FROM auth_user; 

使用之间的区别是NOT NULL where子句中和IF子句中使用它,你的where子句将消除(过滤器)与空值的行,而如果子句将获得所有行,但具有不会为“未知”的全名,则它将仅缺失空分量