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