繁体   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