2014-05-06 154 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')