0
SET @last_nid=-1; 
SELECT vid,
     IF(@last_nid = nid, @last_status, 0) AS last_status,
     @last_status := status AS status,
     @last_nid := nid AS nid 
FROM node_field_revision 
ORDER BY vid;

nidvidは両方とも正の整数でstatus、0 または 1 のいずれかです。

last_statusどのようにして-- になるのか完全に途方にNULL暮れていますが、確かにそうです。

MySQL のマニュアルには次のように書かれています。

expr1 が TRUE (expr1 <> 0 および expr1 <> NULL) の場合、IF() は expr2 を返します。それ以外の場合は expr3 を返します。

まあ、最初は反復@last_nidは等しくありませんnid。なぜなら、一方が負で、もう一方が正だからです。したがって、0 が返されます。はい、@last_statusここでは NULL ですが、返すことはできません。次に、0 または 1 のいずれか@last_statusの値を入力します。status

以降の反復では、@last_status再び NULL になることはありません。

それでも、圧倒的多数の行には NULL があります@last_status-@last_status初期値を指定してもそれは起こりませんが、これは私の考えと私のクエリが偽物であることを意味しますが、なぜ/どのように?

4

1 に答える 1