繁体   English   中英

通过选择查询在表中插入行

[英]Inserting a Row in a Table from Select Query

我在My Sql Server中使用了两个存储过程和两个表。

第一表结构。

在此处输入图片说明

第二表结构。

在此处输入图片说明

当客户预订订单时,数据将插入表1中。

我在另一个从第二个表中选择详细信息的页面中使用选择查询。

如果第二张表中不存在包含来自第一张表的票据编号的行,我想在“选择查询”中插入具有一些默认值的第二张表。 我怎样才能做到这一点 ??

如果要插入同一查询中,则必须创建一个存储过程。 您将在那里查询第二个表中是否存在行,如果不存在,则在第二个表中插入一个新实体。

您的代码应如下所示:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`table`@`%` PROCEDURE `insertBill`(IN billNo int, val1 int, val2 int, val3 int)
BEGIN
    DECLARE totalres INT DEFAULT 0;
     select count(*) from SECOND_TABLE where Bill_Number = billNo INTO totalres;
        IF totalres < 1 THEN
            INSERT into SECOND_TABLE values(val1,val2,val3);
        END IF;
END

Val1,val2和val3是要插入第二个表的valuet。

希望这可以帮助。

您要做的是LEFT JOIN两个表,然后仅选择第二个表没有要LEFT JOIN的表,这意味着帐单号丢失。 在下面的示例中,您可以将@default_inform_status和@default_response_status替换为默认值。

INSERT INTO second_table (Bill_Number, Rest_Inform_Status, Rest_Response_Status)
SELECT ft.Bill_Number, @default_inform_status, @default_response_status
FROM first_table ft
LEFT JOIN second_table st
  ON st.Bill_Number = ft.Bill_number
WHERE st.Bill_Number IS NULL

如果在第一个表中可能有相同Bill_Number重复项,则还应该在SELECT之后添加DISTINCT 但是考虑到它是主键这一事实,这对您来说不是问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM