[英]MySql join statement with all rows in left table
假設我有三個表:
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
這將返回字段中的所有行,但還將返回其他項目數據,如果Ill添加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)
但是,只有在其他項目不使用該行且其他項目正在使用該字段的情況下,此行才返回該字段,因此我不會獲得此字段。 (沒有從左表獲取所有行)
無論如何,即使項目中沒有數據,我如何也可以從左側表(字段)中選擇所有行?
SELECT *
FROM Fields AS F LEFT JOIN DATA AS D ON
F.ID=D.ID LEFT JOIN PROJECT AS P ON F.ID=P.ID
SELECT * FROM field as f
left join data as d on f.ID = d.f_id
WHERE ISNULL(d.p_id,'X') = 'X'
SELECT * FROM field as f
left data as d on f.ID = d.f_id
WHERE (d.p_id = 'X' or d.p_id is null)
好吧,讓我看看,首先我要這樣做:
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"
很抱歉,但是從我的角度來看,問題可能出在解決方案上。 為什么要選擇空行? 您是指列還是行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.