我有两张桌子。猫和数据。
Cat
Cat_Serno
Cat_Name
Data
Data_Serno
Data_Name
Data_Cat_ID
Data_Project_ID
当我正在进行常规加入时,我正在
SELECT t1.*,t2.*
FROM Cat t1
LEFT JOIN Data t2 ON t1.Cat_Serno = t2.Data_Cat_Id
但是当我在Project_Id上应用where条件时,它只给我一列。如果Data表中没有相关数据以及Project_Id上的where子句,我想显示所有类别和Null。如果我使用带有project_id的where子句而不包含Data表中的任何值(例如:Project_Id = 2),它也应该包含Null,即使数据表中没有2。
当我使用Project_Id = 2(数据表中不存在)时,我只获得一个具有空值的记录。
答案 0 :(得分:1)
如果您在where子句中包含column
table Data
,则join
几乎会充当inner join
,因此如果您想要Cat table
的所有记录,您不应在column
子句中包含任何where
数据表,但如果您想申请条件,则可以将其包含在" on
"在join
试试这个,
SELECT t1.*,t2.*
FROM Cat t1
LEFT JOIN Data t2 ON t1.Cat_Serno = t2.Data_Cat_Id
and Project_Id=2
答案 1 :(得分:1)
您必须使用所需值添加where条件,并使用IS NULL
添加OR条件示例:
WHERE (DataName = 'Data_One' OR DataName IS NULL)
请注意,NULL不等于任何值(包括NULL),因此您必须处理它。
另一种方式:
WHERE COALESCE(DataName, 'n/a') IN ('Data_One', 'n/a')
答案 2 :(得分:0)
如果您想从Data和Cat中返回记录,当相对表中没有匹配的记录时,请执行FULL OUTER JOIN,而不是LEFT / RIGHT join。
此外,要从任一表中过滤记录而不过滤整个结果集,请在语句的ON部分应用条件,而不是语句的WHERE部分。例如:
SELECT t1.*, t2.* FROM Cat t1 FULL OUTER JOIN Data t2
ON t1.Cat_Serno = t2.Data_Cat_Id
AND t2.Data_Project_Id = 2
答案 3 :(得分:0)
尝试:
WHERE t2.project_id = ...
OR t2.project_id IS NULL;