-2
 insert into creditcard_info (member_id,card_type,card_number) 
 values ('1','Discover','555') 
 where not exists (
       select * from creditcard_info 
       where card_number='555' and
             card_type='Discover')

カード番号が既に存在するかどうかを確認できるようにしたい.. card_number が存在し、カード card_type が存在する場合は、追加しないでください。それ以外の場合は、この新しいカード番号をカード タイプとともに挿入します。

特定の番号が存在しないテーブルへの挿入に苦労しています。

このエラーが発生します:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL
server version for the right syntax to use near 'where not exists (select * from 
creditcard_info where card_number='555')' at line 2

私を助けてくれてありがとう:)

4

2 に答える 2

0

INSERT ... SELECTステートメントを実行しようとしているようです。

ただし、両方のフィールドに一意のインデックスを追加すると、より効率的になります。

于 2012-04-25T02:19:24.563 に答える
0

複数列の一意のインデックスを作成する必要があります。コードは次のとおりです。

ALTER TABLE creditcard_info ADD UNIQUE idx_card_number_card_type(card_number,card_type);

これは別のクエリとして実行する必要があります。そして、一度追加する必要があります。
他の可能なオプションは、条件が単純な一意のチェックよりも複雑な場合に挿入トリガーの前に追加することです。create trigger構文は次のとおりです。

Create Trigger card_type_unique_card_number_exists Before Insert on creditcard_info
    FOR EACH ROW BEGIN
        DECLARE it_exists INT;
        Set it_exists=(select count(*) from creditcard_info where card_number='555' and card_type='Discover');
        If it_exists>0 Then
            #Throw a meaningful exception by let's say inserting into a table which doesn't exist or something
        END IF;
    END
于 2012-04-25T02:22:26.733 に答える