2012-03-20 104 views
0

是否有可能在mysql中進行連接,以便當且僅當左表中的相應值不存在時才返回右表中的值?mysql join優先

例如

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否則。

(注意2012-03-20是星期二也沒有,tuesday不會被存儲爲一個字符串;-)),即使

回答

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' 

子查詢已被刪除,因爲它們效率不高。

MySQL - COALESCE

+0

雖然不能正常連接。 – Konerak 2012-03-20 11:14:26

+0

雅讓我在那裏...修正:) – fie 2012-03-20 12:02:57

+0

更好,但爲什麼左加入?我想的是對的。 – Konerak 2012-03-20 12:24:50

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 

PS:右外連接僅僅是一個留給在表JOIN逆序...