2

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

第一个表结构。

在此处输入图像描述

第二个表结构。

在此处输入图像描述

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

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

如果第二个表中不存在第一个表中带有 billno 的行,我想在选择查询中插入带有一些默认值的第二个表。我怎样才能做到这一点 ??

4

2 回答 2

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

希望这可以帮助。

于 2012-10-31T07:32:19.177 回答
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第一个表中可能有相同的重复项,您还应该DISTINCTSELECT. 但是考虑到它是主键这一事实,这对您来说不是问题。

于 2012-10-31T07:17:23.163 回答