3

与えられた:

t1{id,type}
t2{type,table1_id}

私はこれを使用しています:

SELECT IF(t1.type IS NULL, 'some default', t1.type) as ret from t1

私はこのようなことをしたい:

SELECT IF(
    t1.type IS NULL, 
    IF(
        (SELECT t2.type FROM t2 WHERE t2.table1_id=t1.id LIMIT 1) IS NOT NULL,
        table2.type,
        'some defaults'
    ),
    t1.type
) as ret from table1
4

2 に答える 2

6

これ -

SELECT IF(
    t1.type IS NULL, 
    IF(
        (SELECT t2.type FROM t2 
           WHERE t2.table1_id=t1.id LIMIT 1)
           IS NOT NULL,
        t2.type,
        'some defaults'),
    t1.type
) as ret from t1, t2 where t1.id = t2.table1_id

うまくいくようです。

于 2012-12-04T00:16:22.330 に答える
4

を探していると思いますIFNULL

IFNULL(expr1,expr2)

そうexpr1でない場合はNULL、 をIFNULL()返しますexpr1。それ以外の場合は を返しますexpr2IFNULL()使用されるコンテキストに応じて、数値または文字列値を返します。

現在のステートメントを次のように転送します。

SELECT IFNULL(t1.type, 'some default') AS ret FROM t1 

または、CASEブロックを使用することもできます。

SELECT
    (SELECT CASE
        WHEN t1.type IS NULL
            THEN 'some default'
        ELSE t1.type
    END AS ret) AS subq
...

お役に立てれば。

于 2012-12-04T00:01:31.967 に答える