My Sql Server で 2 つのストアド プロシージャと 2 つのテーブルを使用しています。
最初のテーブル構造。
2 番目のテーブル構造。
顧客が注文を予約すると、データが表 1 に挿入されます。
2番目のテーブルから詳細を選択する別のページで選択クエリを使用しています。
最初のテーブルの billno を含む行が 2 番目のテーブルに存在しない場合、選択クエリでいくつかのデフォルト値を使用して 2 番目のテーブルに挿入します。これどうやってするの ??
My Sql Server で 2 つのストアド プロシージャと 2 つのテーブルを使用しています。
最初のテーブル構造。
2 番目のテーブル構造。
顧客が注文を予約すると、データが表 1 に挿入されます。
2番目のテーブルから詳細を選択する別のページで選択クエリを使用しています。
最初のテーブルの billno を含む行が 2 番目のテーブルに存在しない場合、選択クエリでいくつかのデフォルト値を使用して 2 番目のテーブルに挿入します。これどうやってするの ??
同じクエリに挿入する場合は、ストアド プロシージャを作成する必要があります。行が 2 番目のテーブルに存在するかどうかを照会し、存在しない場合は 2 番目のテーブルに新しいエンティティを挿入します。
コードは次のようになります。
-- --------------------------------------------------------------------------------
-- 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 は、2 番目のテーブルに挿入される値です。
お役に立てれば。
2 つのテーブルに対して行うことはLEFT JOIN
、2 番目のテーブルに結合する行がないテーブルのみを選択することです。これは、請求書番号が欠落していることを意味します。@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