2014-05-06 197 views
0

我有两个表。猫和数据。加入两个表格Where Where子句

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 

enter image description here

,但是当我在PROJECT_ID应用where条件它给了我只有一列。如果Data表中没有相关数据以及Project_Id上的where子句,我想要显示所有类别并为空。如果我在Data表中使用没有任何值的project_id的where子句(例如:其中Project_Id = 2),那么它应该也包含Null,即使数据表中不存在2也是如此。

当我用数据表中不存在的Project_Id = 2来做时,我只会得到一个带空值的记录。 enter image description here

+0

将你能够把一个http://sqlfiddle.com/样本数据? –

+0

使用'where isnull(project_id,@projectid)= @projectid'其中@projectid是where子句中要使用的值。 – Roopesh

回答

1

如果包括table Datacolumn在where子句中,您join几乎充当inner join,所以如果你想的Cat table所有记录,你不应该包括数据表中的任何columnwhere条款,如果仍然要应用的条件,你可以在join包括在“on”试试这个,

SELECT t1.*,t2.* 
FROM Cat t1 
     LEFT JOIN Data t2 ON t1.Cat_Serno = t2.Data_Cat_Id 
      and Project_Id=2 
+0

非常感谢你! :) –

0

如果要从Data和Cat中返回记录,当在对向表中没有匹配的记录时,请执行FULL OUTER JOIN而不是LEFT/RIGHT连接。

此外,要筛选来自任一表的记录而不过滤整个结果集,请在语句的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 
0

尝试:

WHERE t2.project_id = ... 
OR t2.project_id IS NULL; 
1

你必须与所需的值加where条件,并添加一个或病症IS NULL

例子:

WHERE (DataName = 'Data_One' OR DataName IS NULL) 

请注意,NULL不等于任何值(包括NULL),所以你必须处理它。

另一种方式:

WHERE COALESCE(DataName, 'n/a') IN ('Data_One', 'n/a')