SQLite使用CREATE TABLE AS SELECT建表时如何新增自定义列
SQLite使用
CREATE TABLE ... AS SELECT新增自定义orderID列的方法 你可以直接在SELECT子句中声明自定义的orderID字段,根据你对orderID的业务需求,常见实现方式分为三类:
场景1:需要自增唯一的orderID(常规订单主键场景)
可以用ROW_NUMBER()窗口函数生成从1开始递增的唯一ID,示例如下:CREATE TABLE orders AS SELECT -- 可调整ORDER BY逻辑控制序号生成规则 ROW_NUMBER() OVER (ORDER BY u.username, f.flight_id) AS orderID, u.username, -- 替换为你需要提取的航班字段 f.flight_id, f.departure_city, f.arrival_city, f.departure_time FROM users u -- 替换为你实际的表关联、航班筛选条件 INNER JOIN flights f ON f.flight_id = '你指定的航班ID';如果你需要后续插入新订单时
orderID自动递增,建议先明确定义表结构再插入数据(CTAS语法不会自动给列增加自增属性):-- 第一步:建表定义约束和自增主键 CREATE TABLE orders ( orderID INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, flight_id INTEGER NOT NULL, departure_city TEXT NOT NULL, arrival_city TEXT NOT NULL, departure_time TEXT NOT NULL ); -- 第二步:批量插入关联数据 INSERT INTO orders (username, flight_id, departure_city, arrival_city, departure_time) SELECT u.username, f.flight_id, f.departure_city, f.arrival_city, f.departure_time FROM users u INNER JOIN flights f ON f.flight_id = '你指定的航班ID';场景2:需要固定值的自定义orderID(测试、批量标记场景)
直接在SELECT中写固定值即可:CREATE TABLE orders AS SELECT -- 可替换为你需要的固定值,比如数值0、字符串'PRE_ORDER'等 'BATCH_2024' AS orderID, u.username, f.flight_id, f.departure_city FROM users u INNER JOIN flights f ON f.flight_id = '你指定的航班ID';场景3:需要自定义规则生成的orderID(比如用户名+航班号拼接)
直接在SELECT中写对应的计算逻辑即可,SQLite中字符串拼接用||操作符:CREATE TABLE orders AS SELECT -- 示例:用户名+航班号+时间戳拼接为唯一订单ID u.username || '_' || f.flight_no || '_' || strftime('%s','now') AS orderID, u.username, f.flight_no, f.departure_city FROM users u INNER JOIN flights f ON f.flight_id = '你指定的航班ID';
注意:
CREATE TABLE ... AS SELECT生成的新表不会自动继承原表的主键、索引、非空约束等属性,如果需要这些约束,优先选择先建表再插入数据的方案。
内容的提问来源于stack exchange,提问作者kaylin naidoo
相关产品推荐
相关产品推荐

