2014-10-28 78 views
1

我有兩個表PersonTable1。我想加入persontable1其中foodId爲2SQL Server:INNER JOIN返回不正確的行

然而,當我做內部聯接它只是加入了記錄,其中foodId爲1

Person

id  fName  lName 
1  John  Smith 

Table1

id  personId  foodId  date 
1  1    1   2014-10-28 
2  1    2   2014-10-28 

我嘗試的查詢:

SELECT * 
FROM Person p 
INNER JOIN Table1 t ON p.id = t.personId AND foodId = 2 

我也試過:

SELECT * 
FROM Person p 
INNER JOIN Table1 t ON p.id = t.personId 
WHERE t.foodId = 2 

這兩項查詢顯示空的結果。

任何建議,將不勝感激!

+2

要麼你沒有真正向我們展示你的實際表格,要麼你沒有向我們展示正確的數據 - 用**提供的這個數據**,查詢#2 **是否返回'(1,'John ','史密斯',1,2,'2014-10-28')'作爲它的回答.... – 2014-10-28 15:31:18

+0

這就是我認爲它應該返回。在我的第二個查詢中,如果我沒有包含那個'WHERE'子句,那麼這兩個記錄都應該返回,對嗎? – Andrew 2014-10-28 15:33:47

+0

第一個查詢格式似乎有點奇怪。它可能會工作,如果你嘗試'INNER JOIN Table1 t ON p.id = t.personId AND t.foodId = 2'這可能會解決它,因爲你的第二個條件不引用表別名。如果它有效,它應該仍然會給出相同的結果。 – 2014-10-28 15:38:30

回答

1

SQLFiddle好像是死了......無法連接 - 因此,在這裏張貼在其所有的榮耀...

設置如圖原來的問題:

DECLARE @Person TABLE (id INT, fName VARCHAR(20), lName VARCHAR(50)) 

INSERT INTO @Person 
     (id, fName, lName) 
VALUES 
     (1, -- id - int 
     'John', -- fName - varchar(20) 
     'Smith' -- lName - varchar(50) 
     ) 

DECLARE @Table1 TABLE (id INT, PersonId INT, FoodID INT, T1Date DATE) 

INSERT INTO @Table1 
     (id, PersonId, FoodID, T1Date) 
VALUES 
     (1, -- id - int 
     1, -- PersonId - int 
     1, -- FoodID - int 
     '20141028' -- T1Date - date 
     ), (2, 1, 2, '20141027') 

查詢#2在原來的問題所示:

從該查詢

輸出:

enter image description here

一定有別的事情就在這裏 - 或者你過於簡單的設置,使其不再工作。但是您的查詢#2 DOES會返回一行 - 您期望的那一行。

+0

我簡化了這個問題,但我知道它的工作原理。在我的連接中,我加入了'p.id = t.id'而不是't.personId'。 – Andrew 2014-10-28 15:40:12

+0

@Andrew:** AHA!** - 當然不行:-) – 2014-10-28 15:40:57

0

也許你需要左連接而不是內連接。

SELECT * FROM Table1 t LEFT JOIN Person p ON p.id = t.personId WHERE t.foodId = 2 
+0

我也試過。 – Andrew 2014-10-28 15:32:58

+0

那麼,從每個表中選擇*時,你能得到正確的結果嗎? – 2014-10-28 15:34:46

0

當您進行Inner Join時,只會顯示兩個表中存在的記錄。

我喜歡這張照片 enter image description here