从Select Query中在表中插入行

时间:2012-10-31 07:06:26

标签: sql sql-server

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

第一桌结构。

enter image description here

第二表结构。

enter image description here

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

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

如果第二个表中没有出现第一个表中的billno的行,我想在Select Query中插入带有一些默认值的第二个表。我怎样才能做到这一点 ??

2 个答案:

答案 0 :(得分:4)

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

您的代码应如下所示:

-- --------------------------------------------------------------------------------
-- 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是要插入第二个表的最大值。

希望这有帮助。

答案 1 :(得分:2)

您所做的是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的重复项,您还应在DISTINCT之后添加SELECT。但考虑到它是一个主键,这对你来说不是问题。