2

My Sql Server で 2 つのストアド プロシージャと 2 つのテーブルを使用しています。

最初のテーブル構造。

ここに画像の説明を入力

2 番目のテーブル構造。

ここに画像の説明を入力

顧客が注文を予約すると、データが表 1 に挿入されます。

2番目のテーブルから詳細を選択する別のページで選択クエリを使用しています。

最初のテーブルの billno を含む行が 2 番目のテーブルに存在しない場合、選択クエリでいくつかのデフォルト値を使用して 2 番目のテーブルに挿入します。これどうやってするの ??

4

2 に答える 2

4

同じクエリに挿入する場合は、ストアド プロシージャを作成する必要があります。行が 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 番目のテーブルに挿入される値です。

お役に立てれば。

于 2012-10-31T07:32:19.177 に答える
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も追加する必要があります。しかし、それが主キーであることを考えると、これは問題ではありません。DISTINCTSELECT

于 2012-10-31T07:17:23.163 に答える