如何在同一查询中选择在上面插入的值?

时间:2019-04-06 23:16:49

标签: mysql sql

我正在创建一个存储过程来为属性生成调查。
它首先接收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 ;

这给了我以下错误: enter image description here

因此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。

谢谢!

2 个答案:

答案 0 :(得分:0)

抱怨的原因是在第二个查询中没有survey可以引用,而您只有subqueryproperty。您可以执行一个巧妙的技巧来实际获取最后插入的行的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.idAUTO 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的最后一个值。