Mysql IF内的子查询作为具有null值的列的值

Mysql IF内的子查询作为具有null值的列的值,mysql,if-statement,subquery,Mysql,If Statement,Subquery,鉴于: 我用这个: t1{id,type} t2{type,table1_id} 我想这样做: SELECT IF(t1.type IS NULL, 'some default', t1.type) as ret from t1 我相信你在找我 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1;否则它将返回expr2IFNULL()返回一个数值或字符串值,具体取决于使用它的上下文 将您当前的对账单转换为: SELECT IF( t1.

鉴于:

我用这个:

t1{id,type}
t2{type,table1_id}
我想这样做:

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

我相信你在找我

IFNULL(expr1,expr2)

如果
expr1
不是
NULL
IFNULL()
返回
expr1
;否则它将返回
expr2
IFNULL()
返回一个数值或字符串值,具体取决于使用它的上下文

将您当前的对账单转换为:

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
或者,可以使用块

希望这有帮助。

这--


似乎是的。

谢谢。以前试着回复,但是一些插件给了我麻烦。无论如何:我可以看出它是有效的,但我最初的问题是关于返回值,我如何在IF函数中使用子查询返回的值?
SELECT IFNULL(t1.type, 'some default') AS ret FROM t1 
SELECT
    (SELECT CASE
        WHEN t1.type IS NULL
            THEN 'some default'
        ELSE t1.type
    END AS ret) AS subq
...
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