我想我只是懒惰但是如果我运行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
使用新列选择的*
列,还是必须将*
替换为各列?
答案 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
客户端
通常情况下:只有完全限定的字段序列才会执行这些操作(所以 - 是的,*
无法使用)