假设:
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
答案 0 :(得分: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
似乎work。
答案 1 :(得分:5)
我相信你正在寻找IFNULL
。
IFNULL(expr1,expr2)
如果
expr1
不是NULL
,则IFNULL()
会返回expr1
;否则返回expr2
。IFNULL()
返回一个数字或字符串值,具体取决于使用它的上下文。
哪会将您当前的陈述转移到:
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
...
希望这有帮助。