2016-04-06 74 views
0

假設所有行我有三個表:MySql的連接語句與左表

1. Fields 
ID 
NAME 

2. DATA 
ID 
f_id 
p_id 
data 

3. PROJECT 
ID 

,我需要從田地表不同的數據每一次選擇都行(取決於我需要什麼項目) 所以每當我有所有的行字段,並且如果項目X沒有某個字段的數據,它將返回空行。

我嘗試下面的SQL語句:

SELECT * FROM field as f 
left data as d on f.ID = d.f_id 
WHERE d.p_id = 'X' 

這將只返回X項目有一些數據,如果沒有數據將不會返回空行的行。

我也試過:

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 

這將返回所有行從場也將返回其他項目的數據,如果生病添加Where語句它不會返回空行,如果該項目沒有任何數據。

我也試過:只有

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 
WHERE (p.ID == 'x' || p.ID is null) 

但這回場行如果行不被其他項目使用,如果有現場,使用它的其他項目,所以我不會得到這個領域。 (沒有得到來自左表人行)

我如何可以選擇所有左表中的行(場)反正,也如果項目沒有數據?

+0

可怕的表名,字段和數據... – jarlh

+0

它僅用於示例,不是真名@jarlh – Jordan

回答

0

SELECT * FROM 字段爲F LEFT JOIN數據作爲d ON F.ID = D.ID LEFT JOIN項目作爲P號F.ID = P.ID

+0

提供一些解釋與您的答案。 – Jester

0

SELECT * FROM字段爲f 左加入的數據作爲上f.ID d = d.f_id WHERE ISNULL(d.p_id, 'X')= 'X'

SELECT * FROM字段爲f 左數據作爲上f.ID = d d。 f_id WHERE(d.p_id ='X'或d.p_id爲空)

+0

爲您的答案提供一些解釋。 – Jester

0

好吧,讓我看看,首先我會這樣做:

SELECT F.* FROM field F 
    LEFT data D ON F.id = D.f_id 
    WHERE D.p_id = 'X'; 

因爲你說你只想要來自表字段的數據,對嗎?如果您不使用表前綴將*留在那裏,它會爲您提供每個表上關於連接的所有數據,並且由於每個表上的列ID,您可能會有模糊的錯誤。

另一件事,我把AS,因爲它通常適用於把別名列名,如更好:

"COUNT(ID) AS COUNTER" 

我很抱歉,但我看到它的方式,問題可能是解決方案。你爲什麼要選擇空行?你是指列或行嗎?