SSM*_*SMK 1 sql postgresql insert sql-insert
我有一个名为student以下各列的表,如下所示
S_id, person_id, subject_id, start_date, end_date, count
Run Code Online (Sandbox Code Playgroud)
同时,我编写了一个查询来从其他表中提取数据并将其输入到表person中
我写的查询如下所示
INSERT INTO student (S_id, person_id, subject_id, start_date, end_date, count)
SELECT
person_id
, subject_id,
, MIN(exam_start_date) AS start_date
, end_date
, COUNT(*) AS count
FROM main_table
GROUP BY person_id, subject_id, end_date
ORDER BY person_id, subject_id
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我select query仅从person_id其他列获取数据。
如何为select 语句中的列创建autoincrementor以便插入数据?serialS_id
目前,我收到一个错误
错误:“S_id”列中的空值违反了非空约束详细信息:失败的行包含 (null, 1234, 77670, 2139-04-22, 2139-04-22, 1)。
如果您的s_id列尚未定义为serial或其他内容(否则只需将其从语句的列列表中保留INSERT):
您在寻找row_number()窗口函数吗?这将为您的查询创建一个递增的行计数,以 开头1。
SELECT
row_number() OVER () as s_id, -- <---------------
person_id
, subject_id,
, MIN(exam_start_date) AS start_date
, end_date
, COUNT(*) AS count
FROM main_table
GROUP BY person_id, subject_id, end_date
ORDER BY person_id, subject_id
Run Code Online (Sandbox Code Playgroud)
如果已经有一些记录,也许您应该添加s_id实际表中的当前最大值,以避免与具有相同值的现有记录发生冲突。studentsid
| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |