2012-10-25 44 views
-1

我有表a和b的值,每個都具有在其中的平均場。數據一次只能插入其中一個表中,因此平均字段中的任何一個在給定時間都可以保持爲空。我怎麼可以在這兩個表如果表是一個與平均值,該值是不是空檢索從任MySQL表

Table a 
id average labref 
1 325  123 

Table b 
id average labref 
2 null 123 

中檢索需要的字段的值,我挑選的值,如果下一次表b是一個與平均值和表一是平均值爲空,我選擇表a的值。他們都有相同的ID用於labref!

+2

什麼是表之間的關係?他們應該在ID上匹配嗎?這兩個表中是否存在id? (在avarage中具有NULL的值不同於根本沒有記錄)。 – GolezTrol

+0

該表有一個名爲labref場相同的值也有同樣的價值 – Alphy

+0

戈麥斯,已經設置了字段設置爲null – Alphy

回答

0
select average from (
select average from tablea 
union 
select average from tableb) a 

where average is not null 

OR

select CASE WHEN a.average is null then b.average else a.average end average from tablea a inner join table b 
on a.labref=b.labref 
+0

非常感謝,這工作就像一個魅力 – Alphy

+0

注意,第一個查詢只會返回的** **不同的價值觀平均(這樣,如果相同的平均數字是記錄多個labrefs,即平均僅會被返回),而第二個查詢僅會返回在同一labref被記錄在** **都表平均值。 –

0
SELECT 
    IF(a.average IS NULL, b.average, a.average) AS average 
FROM 
    a, b 
where a.id = b.id 
+0

你可以使用'IFNULL'或者更通用的'COALESCE'。 – GolezTrol

+0

是......只是爲了知識,哪一個在性能上更好? '三元IF','IFNULL'或'COALESCE'? – hemu

-1

您可以使用IFNOTNULL()函數以下列方式:

select IFNOTNULL(average,(select average from b)) from a 

我還沒有測試這一點,並打算關閉的。上面有我頭。

-1

你可以試試這個

select average from a, b where a.average IS NOT NULL and b.average IS NOT NULL 

我不知道的使用IS NOT NULL兩次與否。

0

嘗試:

select labref, max(average) from 
(select labref, average from a union all 
select labref, average from b) ab 
group by labref 
+0

它可能會工作,但也有更清楚的顯示是怎麼回事,並可能會進行大表上更好以及更好的選擇。 – GolezTrol

+0

@GolezTrol:一個連接可能比大型表的聯合表現要差得多。 –

+0

可能,但如果您之後將工會分組,則不會。 – GolezTrol