我在 My Sql Server 中使用了两个存储过程和两个表。
第一个表结构。
第二个表结构。
当客户预订订单时,数据将插入表 1。
我在另一个页面中使用选择查询,它从第二个表中选择详细信息。
如果第二个表中不存在第一个表中带有 billno 的行,我想在选择查询中插入带有一些默认值的第二个表。我怎样才能做到这一点 ??
我在 My Sql Server 中使用了两个存储过程和两个表。
第一个表结构。
第二个表结构。
当客户预订订单时,数据将插入表 1。
我在另一个页面中使用选择查询,它从第二个表中选择详细信息。
如果第二个表中不存在第一个表中带有 billno 的行,我想在选择查询中插入带有一些默认值的第二个表。我怎样才能做到这一点 ??
如果要在同一个查询中插入,则必须创建一个存储过程。在那里,您将查询第二个表中是否存在行,如果不存在,则在第二个表中插入一个新实体。
您的代码应如下所示:
-- --------------------------------------------------------------------------------
-- 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 是要插入到第二个表中的值。
希望这可以帮助。
你要做的是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
. 但是考虑到它是主键这一事实,这对您来说不是问题。