You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中如何为多列设置别名?附示例代码

正确实现方式

首先,你的原语句存在两个核心问题:

  • WHERE子句不能直接引用SELECT列表里定义的别名(SQL执行顺序是先执行WHERE筛选,再处理SELECT的列与别名);
  • 判断NULL值必须用IS NOT NULL,而非!= NULL(NULL不等于任何值,普通比较符对NULL无效)。

以下是两种符合需求的实现方案:

1. 直接判断原列(简洁高效)

如果你的需求是筛选出Name、Family、City三列全部不为空的行,直接在WHERE中使用原列名判断即可:

SELECT Name, Family, City
FROM tblPersonal
WHERE Name IS NOT NULL 
  AND Family IS NOT NULL 
  AND City IS NOT NULL;

若需要将三列合并为一个字符串别名展示,可使用SQLite的字符串拼接符||:

SELECT Name || ' ' || Family || ' ' || City AS Personal
FROM tblPersonal
WHERE Name IS NOT NULL 
  AND Family IS NOT NULL 
  AND City IS NOT NULL;

2. 用CTE/子查询复用别名(适配复杂逻辑)

如果必须基于别名做判断(比如逻辑复杂,不想重复写列名),可以通过公共表表达式(CTE)或子查询先定义别名,再在外部查询中引用:

-- CTE方式
WITH PersonalData AS (
    SELECT 
        (Name, Family, City) AS Personal,
        Name, Family, City
    FROM tblPersonal
)
SELECT Personal
FROM PersonalData
-- 若判断行值不为空(三列中至少有一个不为空)
WHERE Personal IS NOT NULL;
-- 若判断三列全部不为空,替换为下面的条件
-- WHERE Name IS NOT NULL AND Family IS NOT NULL AND City IS NOT NULL;

注意:SQLite中(Name, Family, City)会创建一个行值(row value),行值的IS NOT NULL逻辑是:只要三列中有一列不为NULL,整个行值就不算NULL;只有当三列全为NULL时,行值才是NULL。若目标是筛选三列都不为空的行,优先选择第一种方案,执行效率更高。

内容的提问来源于stack exchange,提问作者Ali Saravani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:08:19