簡體   English   中英

MySql join語句與左表中的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM