左表中所有行的MySql join语句

左表中所有行的MySql join语句,mysql,sql,select,join,left-join,Mysql,Sql,Select,Join,Left Join,假设我有三个表: 1. Fields ID NAME 2. DATA ID f_id p_id data 3. PROJECT ID 每次我都需要从fields表中选择数据不同的所有行(取决于我需要的项目) 所以每次我都会有所有的字段行,如果项目X没有某个字段的数据,它将返回空行 我尝试了以下SQL语句: SELECT * FROM field as f left data as d on f.ID = d.f_id WHERE d.p_id = 'X' 这将只返回project X有

假设我有三个表:

1. Fields
ID
NAME

2. DATA
ID
f_id
p_id
data

3. PROJECT
ID
每次我都需要从fields表中选择数据不同的所有行(取决于我需要的项目) 所以每次我都会有所有的字段行,如果项目X没有某个字段的数据,它将返回空行

我尝试了以下SQL语句:

SELECT * FROM field as f 
left data as d on f.ID = d.f_id
WHERE d.p_id = 'X'
这将只返回project 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
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) 
这将返回字段中的所有行,但也将返回其他项目数据,如果我要添加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
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 F.* FROM field F 
    LEFT data D ON F.id = D.f_id
    WHERE D.p_id = 'X';
因为你说你只需要表格字段中的数据,对吗?如果您将*保留在那里而不使用表前缀,那么它将为您提供连接中每个表上的所有数据,并且由于每个表上的列ID,您可能会出现不明确的错误

另外,我去掉了AS,因为它通常更适用于在列名上添加别名,例如:

    "COUNT(ID) AS COUNTER"

我很抱歉,但在我看来,问题可能是解决办法。为什么要选择空行?你是指列还是行?

好的,让我想想,首先我会这样做:

    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"

我很抱歉,但在我看来,问题可能是解决办法。为什么要选择空行?你指的是列还是行?

可怕的表名、字段和数据…仅用于示例,而不是真正的名称@jarlh可怕的表名、字段和数据…仅用于示例,不是真名@jarlh请用你的答案解释一下。用你的答案解释一下。用你的答案解释一下。用你的答案解释一下。