我在My Sql Server中使用了两个存储过程和两个表。
第一桌结构。
第二表结构。
当客户预订订单时,数据将插入表1中。
我在另一个页面中使用选择查询,从第二个表中选择详细信息。
如果第二个表中没有出现第一个表中的billno的行,我想在Select Query中插入带有一些默认值的第二个表。我怎样才能做到这一点 ??
答案 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
。但考虑到它是一个主键,这对你来说不是问题。