我正在创建一个存储过程来为属性生成调查。
它首先接收property id
输入。
然后,它会在我的survey
表中插入一个新调查,并自动增加survey id
和相应的property id
输入。
最后,该过程执行一系列选择和联接,并检索与所讨论的questions
的{{1}}相关的所有property type
。
这不是相关的部分,因为它可以完美流畅地运行。
因此,在此之前,我的存储过程插入了调查,并显示了一个表,其中有一列property
,该行的行中包含该物业的调查的所有问题。这是该代码:
question_description
问题在于,与显示的问题一起,我现在想显示表示问题所属的调查的ID。 为此,我正在尝试:
DELIMITER //
CREATE PROCEDURE GenerateSurvey (IN input INT)
BEGIN
INSERT INTO survey (property_id, cas_eval_id, checksum_xxx)
VALUES
(input, 'CAS-XXX-YYYY', 123);
SELECT subquery.question_description
FROM (
SELECT question.question_description,
property_type_question.property_type_id
FROM property_type_question
JOIN question
ON property_type_question.question_id = question.id
ORDER BY question.id
) AS subquery
JOIN property
ON subquery.property_type_id = property.property_type_id
WHERE property.id = input;
END //
DELIMITER ;
因此MySQL无法识别DELIMITER //
CREATE PROCEDURE GenerateSurvey (IN input INT)
BEGIN
INSERT INTO survey (property_id, cas_eval_id, checksum_xxx)
VALUES
(input, 'CAS-XXX-YYYY', 123);
SELECT survey.id AS 'Survey ID',
subquery.question_description
FROM (
SELECT question.question_description,
property_type_question.property_type_id
FROM property_type_question
JOIN question
ON property_type_question.question_id = question.id
ORDER BY question.id
) AS subquery
JOIN property
ON subquery.property_type_id = property.property_type_id
WHERE property.id = input;
END //
DELIMITER ;
。
但是survey.id
确实存在。它只是被插入到上面的相同查询中,并且因为它是我的survey.id
表的自动递增主键,所以它没有出现在代码中。
那么我该如何保持程序的能力:
并添加功能以显示调查ID和问题吗?
我正在使用Uwamp和MySQL Workbench 6.2.5。
谢谢!
答案 0 :(得分:0)
抱怨的原因是在第二个查询中没有survey
可以引用,而您只有subquery
和property
。您可以执行一个巧妙的技巧来实际获取最后插入的行的ID:LAST_INSERT_ID()
。因此,只需重写您的过程,如下所示:
DELIMITER //
CREATE PROCEDURE GenerateSurvey (IN input INT)
BEGIN
INSERT INTO survey (property_id, cas_eval_id, checksum_xxx)
VALUES
(input, 'CAS-XXX-YYYY', 123);
SELECT LAST_INSERT_ID() AS 'Survey ID',
subquery.question_description
FROM (
SELECT question.question_description,
property_type_question.property_type_id
FROM property_type_question
JOIN question
ON property_type_question.question_id = question.id
ORDER BY question.id
) AS subquery
JOIN property
ON subquery.property_type_id = property.property_type_id
WHERE property.id = input;
END //
DELIMITER ;
你应该很好。
答案 1 :(得分:0)
假设survey.id
是AUTO INCREMENT
列,则可以使用LAST_INSERT_ID()
来获取其值。毫无争议,
LAST_INSERT_ID()
返回一个BIGINT UNSIGNED(64位)值,该值表示由于最近执行的INSERT语句而成功为AUTO_INCREMENT列成功插入的第一个自动生成的值。
所以您只需更改
SELECT survey.id AS 'Survey ID',
到
SELECT LAST_INSERT_ID() AS 'Survey ID',
要获取survey.id
的最后一个值。