是否可以在mysql中进行连接,以便当且仅当左表中的相应值不存在时才返回右表中的值?
例如
SELECT * FROM
(SELECT userid,status FROM date_status WHERE date='20-03-2012') ds
JOIN
(SELECT userid,status FROM default_weekday_status WHERE day='tuesday') dws
ON
ds.userid=dws.userid
如果date_status中的行存在,我希望这返回date_status.status
,否则返回default_weekday_status.status
。
(请注意,20-03-2012是星期二,不,tuesday
不会存储为字符串;-))
答案 0 :(得分:3)
使用RIGHT OUTER JOIN从右表中选择所有值,即使左表没有值。
现在使用COALESCE获取ds.value,当值为NULL时,获取dws.value:
SELECT COALESCE(ds.value,dws.value) FROM
(SELECT userid,status FROM date_status WHERE date='20-03-2012') ds
RIGHT OUTER JOIN
(SELECT userid,status FROM default_weekday_status WHERE day='tuesday') dws
ON
ds.userid=dws.userid
P.S。:一个正确的外部联接只是一个LEFT JOIN,表格按逆序排列......
答案 1 :(得分:3)
最简单的方法是使用COALESCE功能。我将在参数列表中返回第一个非空值。
SELECT coalesce(ds.status,dws.status) as status FROM
date_status ds
RIGHT JOIN
default_weekday_status dws
ON
ds.userid=dws.userid
WHERE
ds.date='20-03-2012' or dws.day='tuesday'
子查询已被删除,因为它们效率不高。