2011-08-04 6 views
1

ルックアップテーブルに何かがある場合に動作する次のクエリがあります。しかし、 "z.a"が何も等しくなければ、INSERTは失敗します。これはなぜでしょうか?ヌル時のルックアップ付きMySQL INSERT

INSERT INTO dataTable(
    a, 
    b, 
    c, 
    d, 
    e, 
    f, 
    g, 
    h, 
    i, 
    j, 
    k, 
    l, 
    m, 
    n, 
    o, 
    p 
)SELECT 
    '000003', 
    COALESCE(z.Registration, 'REG6'), 
    'PFTEST', 
    '1', 
    '1', 
    '37000.0', 
    '148.0', 
    '439.8', 
    '1312475688', 
    '0', 
    '54', 
    COALESCE(z.TypeCode, 'A555'), 
    '', 
    '1173', 
    '0', 
    'nJ' 
FROM 
    LookupTable z 
WHERE 
    z.a = '000003' 

答えて

1

最後に、WHEREを完全に削除し、VALUESの中でselectを直接実行しました。非常にうまく動作します

1

外側の挿入クエリは、選択が返すものを挿入します。何も返さない場合、挿入するものは何ですか?これは予想される動作です。それ以外のものは狂っているだろう - 挿入できるものがなければ何を挿入すべきか?挿入クエリがデータを構成すべきか?

+0

目的はデータが既に存在することですが、そこに何かがある場合にルックアップテーブルの値をオーバーライドしたいので、Coalesceを使用します –

+0

それ自体で選択クエリを実行してみてください。何も返しません。あなたが何かを返す形式にマッサージするまで、挿入クエリは基本的に役に立たないです。 –

+0

まあ私はクエリが何も返さないことを知っています、これは大きなループの一部です、私はこれを発見しました!これは値があるのに、値がないときに "A555"のような他の値を使用したい場合に機能します。 –