2016-04-17 20 views
2

誰かがこのSQLコードの理解に助けてくれますか? これは実際にはもっと私を混乱させているものである - END = G.CODEこのSQLクエリを理解するのに助けが必要

SELECT something, something 
FROM ABCD A 
JOIN GHIJ G ON 
    CASE  
     WHEN A.CODE = 'not available' THEN 'NA_CODE' 
     ELSE A.CODE END = G.CODE 
        LEFT JOIN PRODUCT P ON P.ID = A.ID 
        WHERE P.ID IS NULL; 
GO   

をあなたは正しくフォーマットされたコードを見たとき、あなたがそれを理解してくれてありがとう イシャー

+0

申し訳ありません、私は今でした – Newbie

+1

@RanchiRhinoありがとう!! – Newbie

答えて

3

CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END = G.CODE 

B.XYZは、それが G.CODEで同じ値と一致することができるように 'NA_CODE'に「利用できません」の値の結合列 A.CODEを操作するためのcase文である
B.XYZ = G.CODE 

のような句に参加することを検討してください。 値 'not available'を除いて、case文は 'not available'を'NA_CODE'にのみ操作するので、join句はG.CODEの値と一致する可能性があります。

詳細については、ケースステートメントをご覧ください。

ご理解いただきありがとうございます。ここで

: -

B.XYZ =[CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END]

+0

私はあなたがcase文で苦労していると思います。それはCASEで始まり、ENDで終わります。....すべてのcalucaltionは単一の列の値として出てきます。あなたのおかげで – RanchiRhino

+0

万人。私は本当にこのコードを数日から苦労していました。あなたは救い主です。 – Newbie

+0

ようこそ@IshaGupta .... :-) – RanchiRhino

1

があるより多くのあなたがこのクエリで理解する必要があります。

あなたは "CASE ... END = G.CODE"に対して良い答えを得ました。実際には、 "END"はそれ自身では存在しませんが、それはCASE式構文の最後のキーワードです。

これで、クエリが行を返さないことに注意してください。 A.IDがNULLであるP.ID = A.IDと行の行だけを - 最後に、あなたが「NULL ISは」LEFTで返されていないP.IDと

...LEFT JOIN PRODUCT P ON P.ID = A.ID 
    WHERE P.ID IS NULL 

行JOINをしているためです返されます。 (P.IDがNULLの場合、A.IDとの等価はUNKNOWNなので、行は返されません)

+0

ねえ、ありがとう、私はあなたのポイントを持っていますが、私たちはテーブルPに新しいレコードを挿入しようとしているので、テーブルPにはまだこのクエリは正しく動作するはずですテーブルAの新しいレコードがありますか?私のクエリは実際にはINSERT INTO A、SELECT SOMEE​​THING SOMETHING ........... – Newbie

+0

あなたの実際のコードを見ることなく伝えるのは難しいです。私はあなたが "挿入"の部分に入る前に選択が評価されるので、 "いいえ"と言う傾向があります。あなたがそれについて助けを必要とするなら、INSERTステートメント全体を投稿してください。製品に – mathguy

+0

INSERT GLOBALID TYPE BLOCK COLOR CODE はABCD A FROM \t A.GLOBALID \t A.TYPE A.BLOCK A.COLOR G.CODEを選択 CASE ON GHIJ GをJOIN A.CODE = 'は使用できません' は 'NA_CODE' ELSE A.CODE端= G.CODE LEFTはP.IDがNULL IS P.ID = A.ID の製品Pに参加するとき。 GO – Newbie

関連する問題