我正在尝试在pgadmin3中执行执行以下操作的SQL语句:
如果已存在具有特定姓名和年龄的学生,则让student_id
其他人插入具有指定姓名和年龄的新记录,然后获取创建的student_id
我试过这段代码:
IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and studentage=15)
BEGIN
SELECT student_id FROM main.student WHERE studentname='hhh' and studentage=15
END
ELSE
BEGIN
INSERT INTO main.student(studentname,studentage) VALUES('hhh',15)
END;
END IF;
但我总是收到这个错误:
你能告诉我我做错了吗?另外,如何在insert语句后获取student_id?语法错误在或附近" IF" SQL状态:42601 性格:1
答案 0 :(得分:0)
IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and studentage=15) THEN
SELECT student_id FROM main.student WHERE studentname='hhh' and studentage=15;
ELSE
INSERT INTO main.student(studentname,studentage) VALUES('hhh',15);
END IF;
您需要考虑以下几点:
IF
声明,您需要使用THEN
BEGIN/END
;
此外,如果您正在运行ad-hoc语句,则需要在DO
命令
DO
$do$
IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and studentage=15) THEN
SELECT student_id FROM main.student WHERE studentname='hhh' and studentage=15;
ELSE
INSERT INTO main.student(studentname,studentage) VALUES('hhh',15);
END IF;
END
$do$
对于问题的最后一部分,您可以返回要插入的ID
INSERT INTO main.student(studentname,studentage) VALUES('hhh',15) RETURNING student_id
答案 1 :(得分:0)
实际上你的陈述不是SQL。这是PL / PGSQL声明。
很明显,当你将它作为SQL查询发送给Postgres时,它会引发异常。
如果您是从pgAdmin3执行此操作,则可以运行pl / psql脚本。用它