使用mysql中的if语句覆盖列结果

时间:2014-01-16 18:53:01

标签: mysql

我想我只是懒惰但是如果我运行sql查询:

   SELECT *, IF(enddate='0000-00-00',null,enddate) as enddate from
   employees where (enddate is null || enddate > now())
   order by name asc

我显然最终得到了两个enddate列。

我只是想知道是否仍然会覆盖endate使用新列选择的*列,还是必须将*替换为各列?

1 个答案:

答案 0 :(得分:1)

不,没有办法避免返回两列。但是 - 如果你使用的是使用返回的关联字段的mysql-driver行提取(例如,PHP的mysqli_result::fetch_assoc),你可以使用这个技巧:

   SELECT 
     IF(enddate='0000-00-00',null,enddate) as enddate,  
     employees.* 
   from
     employees 
   where 
     (enddate is null || enddate > now())
   order by name asc

- 不要忘记限定全表名称(即employees.*,而不仅仅是*)。可以找到样本here

然后第一个字段将是您的表达式而不是原始字段。实际上,这就是您在链接的SQLFiddle示例中看到的,即它使用关联字段提取,因此,一个字段会覆盖另一个字段,但这并不意味着在原始数据集中会有一列(因此在通常情况下)你不能依赖它 - 检查你是否可以使用mysql客户端

通常情况下:只有完全限定的字段序列才会执行这些操作(所以 - 是的,*无法使用)